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/multimap.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/multimap.c')
| -rw-r--r-- | src/multimap.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/multimap.c b/src/multimap.c index b958db0..033b511 100644 --- a/src/multimap.c +++ b/src/multimap.c @@ -193,11 +193,12 @@ size_t multimap_delete(void *ptr, const void *key, const void *val) struct multimap_node *node = hash_lookup(map->hash_tab, key); if(!node) - return false; + return 0; + /* iterate over the node's pairs and delete */ size_t deleted = 0; - struct multimap_list *last = NULL, *iter = node->list, *next;; + struct multimap_list *last = NULL, *iter = node->list, *next; while(iter) { next = iter->next; @@ -209,9 +210,10 @@ size_t multimap_delete(void *ptr, const void *key, const void *val) map->free_key((void*)iter->key); if(last) - last->next = iter->next; + last->next = next; else - node->list = iter->next; + node->list = next; + free(iter); ++deleted; @@ -251,7 +253,9 @@ size_t multimap_delete_all(void *ptr, const void *key) return ret; } - /* fall through */ + + /* fall through on failure */ + } return 0; } |