upgraded to the latest NetBSD version
[unix-history] / usr / src / usr.bin / make / lst.lib / lstDestroy.c
index 58d73af..8f00696 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)lstDestroy.c       8.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)lstDestroy.c       8.2 (Berkeley) %G%";
 #endif /* not lint */
 
 /*-
 #endif /* not lint */
 
 /*-
@@ -37,7 +37,7 @@ static char sccsid[] = "@(#)lstDestroy.c      8.1 (Berkeley) %G%";
 void
 Lst_Destroy (l, freeProc)
     Lst                        l;
 void
 Lst_Destroy (l, freeProc)
     Lst                        l;
-    register void      (*freeProc)();
+    register void      (*freeProc) __P((ClientData));
 {
     register ListNode  ln;
     register ListNode  tln = NilListNode;
 {
     register ListNode  ln;
     register ListNode  tln = NilListNode;
@@ -50,21 +50,25 @@ Lst_Destroy (l, freeProc)
         */
        return;
     }
         */
        return;
     }
-    
+
+    /* To ease scanning */
+    if (list->lastPtr != NilListNode)
+       list->lastPtr->nextPtr = NilListNode;
+    else {
+       free ((Address)l);
+       return;
+    }
+
     if (freeProc) {
     if (freeProc) {
-       for (ln = list->firstPtr;
-            ln != NilListNode && tln != list->firstPtr;
-            ln = tln) {
-                tln = ln->nextPtr;
-                (*freeProc) (ln->datum);
-                free ((Address)ln);
+       for (ln = list->firstPtr; ln != NilListNode; ln = tln) {
+            tln = ln->nextPtr;
+            (*freeProc) (ln->datum);
+            free ((Address)ln);
        }
     } else {
        }
     } else {
-       for (ln = list->firstPtr;
-            ln != NilListNode && tln != list->firstPtr;
-            ln = tln) {
-                tln = ln->nextPtr;
-                free ((Address)ln);
+       for (ln = list->firstPtr; ln != NilListNode; ln = tln) {
+            tln = ln->nextPtr;
+            free ((Address)ln);
        }
     }
     
        }
     }