diff options
| author | Franklin Wei <git@fwei.tk> | 2016-03-24 21:45:47 -0400 |
|---|---|---|
| committer | Franklin Wei <git@fwei.tk> | 2016-03-24 21:45:47 -0400 |
| commit | eb8b5907df2cf3c4b593197d40d10e83e6943ee3 (patch) | |
| tree | e19b5d3ee90e7d29b5975ad05496b2ab1385ad15 /src/userdb.c | |
| parent | a91f858ebaea0f403b2c59773e619086b9198a39 (diff) | |
| download | netcosm-eb8b5907df2cf3c4b593197d40d10e83e6943ee3.zip netcosm-eb8b5907df2cf3c4b593197d40d10e83e6943ee3.tar.gz netcosm-eb8b5907df2cf3c4b593197d40d10e83e6943ee3.tar.bz2 netcosm-eb8b5907df2cf3c4b593197d40d10e83e6943ee3.tar.xz | |
fix for drop bug
Diffstat (limited to 'src/userdb.c')
| -rw-r--r-- | src/userdb.c | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/src/userdb.c b/src/userdb.c index dde2693..101b6d0 100644 --- a/src/userdb.c +++ b/src/userdb.c @@ -183,7 +183,6 @@ bool userdb_remove(const char *key) bool userdb_add(struct userdata_t *data) { - userdb_dump(); struct userdata_t *new = calloc(1, sizeof(*new)); /* only in C! */ memcpy(new, data, sizeof(*new)); @@ -239,9 +238,6 @@ void userdb_dump(void) void userdb_shutdown(void) { - if(map && db_file && !are_child) - userdb_write(db_file); - if(map) { hash_free(map); @@ -283,6 +279,39 @@ bool userdb_add_obj(const char *name, struct object_t *obj) return multimap_insert(user->objects, obj->name, obj_dup(obj)); } +bool userdb_del_obj_by_ptr(const char *username, struct object_t *obj) +{ + struct userdata_t *user = userdb_lookup(username); + + struct obj_alias_t *iter = obj->alias_list; + + struct object_t tmp; + tmp.id = obj->id; + + while(iter) + { + multimap_delete(user->objects, iter->alias, &tmp); + iter = iter->next; + } + + return multimap_delete(user->objects, obj->name, &tmp); +} + +bool userdb_del_obj(const char *username, const char *obj_name) +{ + struct userdata_t *user = userdb_lookup(username); + const struct multimap_list *iter = multimap_lookup(user->objects, obj_name, NULL); + while(iter) + { + const struct multimap_list *next = iter->next; + struct object_t *obj = iter->val; + userdb_del_obj_by_ptr(username, obj); + iter = next; + } + + return true; +} + /*** child request wrappers ***/ /* NOTE: these also work from the master, but it's better to use the * userdb_* funcs instead */ |