diff options
| author | Franklin Wei <frankhwei536@gmail.com> | 2016-01-31 19:53:45 -0500 |
|---|---|---|
| committer | Franklin Wei <frankhwei536@gmail.com> | 2016-01-31 19:53:45 -0500 |
| commit | 0730fc3924dd4e04efbe51287d1d69850404d05f (patch) | |
| tree | 495d79d0dc26e39c9065c6ceb7d16b9a3e76561d /src/userdb.c | |
| parent | 8405274a91e3652ee98a423608a8496ead1edc05 (diff) | |
| download | netcosm-0.5.0-rc1.zip netcosm-0.5.0-rc1.tar.gz netcosm-0.5.0-rc1.tar.bz2 netcosm-0.5.0-rc1.tar.xz | |
bump version to 0.5.0-rc10.5.0-rc1
* implements objects using reference counts rather than copying
* implements both room-local and global verbs
* refactors the world_* functions into a separate module
* numerous other changes
Diffstat (limited to 'src/userdb.c')
| -rw-r--r-- | src/userdb.c | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/src/userdb.c b/src/userdb.c index 3d42133..b434e54 100644 --- a/src/userdb.c +++ b/src/userdb.c @@ -26,27 +26,18 @@ static void *map = NULL; static char *db_file = NULL; -static void free_userdata_and_objs(void *ptr) +static void free_userdata(void *ptr) { struct userdata_t *data = ptr; if(data->objects) { - hash_setfreedata_cb(data->objects, obj_free); hash_free(data->objects); data->objects = NULL; } free(data); } -static void free_userdata(void *ptr) -{ - struct userdata_t *data = ptr; - - hash_free(data->objects); - free(data); -} - /* * the user DB is stored on disk as an binary flat file * @@ -87,6 +78,9 @@ void userdb_init(const char *file) hash_djb, compare_strings); + hash_setfreedata_cb(data->objects, obj_free); + hash_setdupdata_cb(data->objects, (void*(*)(void*))obj_dup); + for(unsigned i = 0; i < n_objects; ++i) { struct object_t *obj = obj_read(fd); @@ -163,6 +157,7 @@ struct userdata_t *userdb_add(struct userdata_t *data) /* don't overwrite their inventory */ struct userdata_t *old = userdb_lookup(new->username); + if(old && old->objects) new->objects = hash_dup(old->objects); else @@ -188,7 +183,6 @@ void userdb_shutdown(void) if(map) { - hash_setfreedata_cb(map, free_userdata_and_objs); hash_free(map); map = NULL; } |