From 0730fc3924dd4e04efbe51287d1d69850404d05f Mon Sep 17 00:00:00 2001 From: Franklin Wei Date: Sun, 31 Jan 2016 19:53:45 -0500 Subject: bump version to 0.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 --- src/userdb.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) (limited to 'src/userdb.c') 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; } -- cgit v1.1