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);
#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;