aboutsummaryrefslogtreecommitdiff
path: root/src/multimap.c
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2016-03-24 21:45:47 -0400
committerFranklin Wei <git@fwei.tk>2016-03-24 21:45:47 -0400
commiteb8b5907df2cf3c4b593197d40d10e83e6943ee3 (patch)
treee19b5d3ee90e7d29b5975ad05496b2ab1385ad15 /src/multimap.c
parenta91f858ebaea0f403b2c59773e619086b9198a39 (diff)
downloadnetcosm-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.c14
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;
}