* Copyright 2000-2002 Project Purple
*/
-#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include "ll.h"
+#include "log.h"
struct ll *lladd(struct ll *curll, void *object)
{
struct ll *cur = NULL;
struct ll *old = NULL;
- assert(objectcmp != NULL);
+ log_assert(objectcmp != NULL);
cur = curll;
if (cur == NULL) {
{
struct ll *cur;
- assert(objectcmp != NULL);
+ log_assert(objectcmp != NULL);
cur = curll;
while (cur != NULL && (*objectcmp)(cur->object, object)) {
return count;
}
+
+/**
+ * llfree - Frees a linked list.
+ * @curll: The list to free.
+ * @objectfree: A pointer to a free function for the object.
+ *
+ * Walks through a list and free it. If a function is provided for
+ * objectfree then it's called for each element to free them, if it's NULL
+ * just the list is freed.
+ */
+void llfree(struct ll *curll, void (*objectfree) (void *object))
+{
+ struct ll *nextll;
+
+ while (curll != NULL) {
+ nextll = curll->next;
+ if (curll->object != NULL && objectfree != NULL) {
+ objectfree(curll->object);
+ curll->object = NULL;
+ }
+ free(curll);
+ curll = nextll;
+ }
+ return;
+}