diff options
Diffstat (limited to 'interpreter/util/slset.c')
-rw-r--r-- | interpreter/util/slset.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/interpreter/util/slset.c b/interpreter/util/slset.c index 1d1af9a..669afb1 100644 --- a/interpreter/util/slset.c +++ b/interpreter/util/slset.c @@ -1,4 +1,4 @@ -/* $Id: slset.c 4800 2009-10-02 13:36:20Z potyra $ +/* $Id: slset.c 5111 2012-03-08 22:26:15Z potyra $ * * Tiny implementation of a single linked set. * @@ -9,7 +9,6 @@ */ #include "slset.h" -#include <stdlib.h> #include <assert.h> #include <stdbool.h> #include <stdio.h> @@ -31,7 +30,7 @@ extern char _init; } #else /* ! DEBUG_MEM_FUNC */ -#define CHECK_FUNC_ADDR(fun_ptr) +#define CHECK_FUNC_ADDR(fun_ptr) /* nothing */ #endif /* DEBUG_MEM_FUNC */ static int @@ -239,7 +238,7 @@ slset_remove(struct slset *s, const void *data, void (*deallocator)(void *)) if (prev == i) { /* first element */ s->first = prev->next; - free(i); + deallocator(i); return; } @@ -272,7 +271,12 @@ slset_clear(struct slset *s, void (*deallocator)(void *)) } void -slset_truncate_at(struct slset *s, const void *data, bool del_data) +slset_truncate_at( + struct slset *s, + const void *data, + bool del_data, + void (*deallocator)(void *) +) { struct slset_entry *i; struct slset_entry *prev = NULL; @@ -305,10 +309,10 @@ slset_truncate_at(struct slset *s, const void *data, bool del_data) i = i->next; if (del_data) { - free(prev->data); + deallocator(prev->data); } - free(prev); + deallocator(prev); } } |