summaryrefslogtreecommitdiff
path: root/interpreter/util/slset.c
diff options
context:
space:
mode:
Diffstat (limited to 'interpreter/util/slset.c')
-rw-r--r--interpreter/util/slset.c18
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);
}
}