# HG changeset patch # User Rob Landley # Date 1400673463 18000 # Node ID 114ec0ab161c6b982a797891035e687af9ac6054 # Parent 88abd5b68a170154f87173d2bf606eaaa3905060 Add free functions for predefined llist types. diff -r 88abd5b68a17 -r 114ec0ab161c lib/lib.h --- a/lib/lib.h Wed May 21 05:12:38 2014 -0500 +++ b/lib/lib.h Wed May 21 06:57:43 2014 -0500 @@ -24,7 +24,9 @@ char *data; }; -void llist_traverse(void *list, void (*using)(void *data)); +void llist_free_arg(void *node); +void llist_free_double(void *node); +void llist_traverse(void *list, void (*using)(void *node)); void *llist_pop(void *list); // actually void **list void *dlist_pop(void *list); // actually struct double_list **list void dlist_add_nomalloc(struct double_list **list, struct double_list *new); diff -r 88abd5b68a17 -r 114ec0ab161c lib/llist.c --- a/lib/llist.c Wed May 21 05:12:38 2014 -0500 +++ b/lib/llist.c Wed May 21 06:57:43 2014 -0500 @@ -5,8 +5,26 @@ #include "toys.h" +// Callback function to free data pointer of double_list or arg_list + +void llist_free_arg(void *node) +{ + struct arg_list *d = node; + + free(d->arg); + free(d); +} + +void llist_free_double(void *node) +{ + struct double_list *d = node; + + free(d->data); + free(d); +} + // Call a function (such as free()) on each element of a linked list. -void llist_traverse(void *list, void (*using)(void *data)) +void llist_traverse(void *list, void (*using)(void *node)) { void *old = list;