aboutsummaryrefslogtreecommitdiff
path: root/src/multimap.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimap.c')
-rw-r--r--src/multimap.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/multimap.c b/src/multimap.c
index d609d0f..b958db0 100644
--- a/src/multimap.c
+++ b/src/multimap.c
@@ -203,11 +203,17 @@ size_t multimap_delete(void *ptr, const void *key, const void *val)
next = iter->next;
if(!map->compare_val(val, iter->val))
{
+ if(map->free_data)
+ map->free_data(iter->val);
+ if(map->free_key)
+ map->free_key((void*)iter->key);
+
if(last)
last->next = iter->next;
else
node->list = iter->next;
free(iter);
+
++deleted;
--node->n_pairs;
--map->total_pairs;
@@ -250,9 +256,9 @@ size_t multimap_delete_all(void *ptr, const void *key)
return 0;
}
-const struct multimap_list *multimap_iterate(void *ptr, void **save, size_t *n_pairs)
+const struct multimap_list *multimap_iterate(const void *ptr, void **save, size_t *n_pairs)
{
- struct multimap_t *map = ptr;
+ const struct multimap_t *map = ptr;
CHECK_SENTINEL(map);
struct multimap_node *node;