aboutsummaryrefslogtreecommitdiff
path: root/src/userdb.c
diff options
context:
space:
mode:
authorFranklin Wei <frankhwei536@gmail.com>2016-01-31 19:53:45 -0500
committerFranklin Wei <frankhwei536@gmail.com>2016-01-31 19:53:45 -0500
commit0730fc3924dd4e04efbe51287d1d69850404d05f (patch)
tree495d79d0dc26e39c9065c6ceb7d16b9a3e76561d /src/userdb.c
parent8405274a91e3652ee98a423608a8496ead1edc05 (diff)
downloadnetcosm-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.c16
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;
}