- fix case where ll_delete removes the last entry
authorBrendan O'Dea <bod@optus.net>
Thu, 18 Nov 2004 08:12:55 +0000 (08:12 +0000)
committerBrendan O'Dea <bod@optus.net>
Thu, 18 Nov 2004 08:12:55 +0000 (08:12 +0000)
- ll_iterate should pass item->data, not item

ll.c

diff --git a/ll.c b/ll.c
index 2b00090..a65b2e4 100644 (file)
--- a/ll.c
+++ b/ll.c
@@ -1,6 +1,6 @@
 // L2TPNS Linked List Stuff
 
-char const *cvs_id_ll = "$Id: ll.c,v 1.5 2004-08-13 00:02:50 fred_nerk Exp $";
+char const *cvs_id_ll = "$Id: ll.c,v 1.6 2004-11-18 08:12:55 bodea Exp $";
 
 #include <stdio.h>
 #include <sys/file.h>
@@ -74,9 +74,8 @@ void ll_iterate(linked_list *l, int(*func)(void *))
 
        for (i = l->head; i; i = i->next)
        {
-               if (i->data)
-                       if (!func(i))
-                               break;
+               if (i->data && !func(i->data))
+                       break;
        }
 }
 
@@ -107,8 +106,8 @@ void ll_delete(linked_list *l, void *data)
                if (i->data == data)
                {
                        if (l->head == i) l->head = i->next;
-                       if (l->end == i) l->end = i->next;
-                       if (p) p->next = i->next;
+                       if (l->end == i)  l->end = p;
+                       if (p)            p->next = i->next;
                        free(i);
                        l->current = NULL;
                        return;