diff options
-rw-r--r-- | lib/llist.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/llist.c b/lib/llist.c new file mode 100644 index 00000000..9047e8b5 --- /dev/null +++ b/lib/llist.c @@ -0,0 +1,21 @@ +/* vi: set sw=4 ts=4 : + * llist.c - Linked list functions + * + * Linked list structures have a next pointer as their first element. + */ + +#include "toys.h" + +// Free all the elements of a linked list +// if freeit!=NULL call freeit() on each element before freeing it. + +void llist_free(void *list, void (*freeit)(void *data)) +{ + while (list) { + void **next = (void **)list; + void *list_next = *next; + if (freeit) freeit(list); + free(list); + list = list_next; + } +} |