From eb8b5907df2cf3c4b593197d40d10e83e6943ee3 Mon Sep 17 00:00:00 2001 From: Franklin Wei Date: Thu, 24 Mar 2016 21:45:47 -0400 Subject: fix for drop bug --- src/multimap.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'src/multimap.c') 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; } -- cgit v1.1