1*40412Sbostic /* 2*40412Sbostic * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. 3*40412Sbostic * All rights reserved. 440411Sbostic * 5*40412Sbostic * This code is derived from software contributed to Berkeley by 6*40412Sbostic * Adam de Boor. 740411Sbostic * 8*40412Sbostic * Redistribution and use in source and binary forms are permitted 9*40412Sbostic * provided that the above copyright notice and this paragraph are 10*40412Sbostic * duplicated in all such forms and that any documentation, 11*40412Sbostic * advertising materials, and other materials related to such 12*40412Sbostic * distribution and use acknowledge that the software was developed 13*40412Sbostic * by the University of California, Berkeley. The name of the 14*40412Sbostic * University may not be used to endorse or promote products derived 15*40412Sbostic * from this software without specific prior written permission. 16*40412Sbostic * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 17*40412Sbostic * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 18*40412Sbostic * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 1940411Sbostic */ 20*40412Sbostic 2140411Sbostic #ifndef lint 22*40412Sbostic static char sccsid[] = "@(#)lstDestroy.c 5.2 (Berkeley) 03/11/90"; 23*40412Sbostic #endif /* not lint */ 2440411Sbostic 25*40412Sbostic /*- 26*40412Sbostic * LstDestroy.c -- 27*40412Sbostic * Nuke a list and all its resources 28*40412Sbostic */ 29*40412Sbostic 3040411Sbostic #include "lstInt.h" 3140411Sbostic 3240411Sbostic /*- 3340411Sbostic *----------------------------------------------------------------------- 3440411Sbostic * Lst_Destroy -- 3540411Sbostic * Destroy a list and free all its resources. If the freeProc is 3640411Sbostic * given, it is called with the datum from each node in turn before 3740411Sbostic * the node is freed. 3840411Sbostic * 3940411Sbostic * Results: 4040411Sbostic * None. 4140411Sbostic * 4240411Sbostic * Side Effects: 4340411Sbostic * The given list is freed in its entirety. 4440411Sbostic * 4540411Sbostic *----------------------------------------------------------------------- 4640411Sbostic */ 4740411Sbostic void 4840411Sbostic Lst_Destroy (l, freeProc) 4940411Sbostic Lst l; 5040411Sbostic register void (*freeProc)(); 5140411Sbostic { 5240411Sbostic register ListNode ln; 5340411Sbostic register ListNode tln = NilListNode; 5440411Sbostic register List list = (List)l; 5540411Sbostic 5640411Sbostic if (l == NILLST || ! l) { 5740411Sbostic /* 5840411Sbostic * Note the check for l == (Lst)0 to catch uninitialized static Lst's. 5940411Sbostic * Gross, but useful. 6040411Sbostic */ 6140411Sbostic return; 6240411Sbostic } 6340411Sbostic 6440411Sbostic if (freeProc) { 6540411Sbostic for (ln = list->firstPtr; 6640411Sbostic ln != NilListNode && tln != list->firstPtr; 6740411Sbostic ln = tln) { 6840411Sbostic tln = ln->nextPtr; 6940411Sbostic (*freeProc) (ln->datum); 7040411Sbostic free ((Address)ln); 7140411Sbostic } 7240411Sbostic } else { 7340411Sbostic for (ln = list->firstPtr; 7440411Sbostic ln != NilListNode && tln != list->firstPtr; 7540411Sbostic ln = tln) { 7640411Sbostic tln = ln->nextPtr; 7740411Sbostic free ((Address)ln); 7840411Sbostic } 7940411Sbostic } 8040411Sbostic 8140411Sbostic free ((Address)l); 8240411Sbostic } 83