|
|
1.1 root 1: /*
2: * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
3: * All rights reserved.
4: *
5: * This code is derived from software contributed to Berkeley by
6: * Adam de Boor.
7: *
8: * Redistribution and use in source and binary forms are permitted
9: * provided that: (1) source distributions retain this entire copyright
10: * notice and comment, and (2) distributions including binaries display
11: * the following acknowledgement: ``This product includes software
12: * developed by the University of California, Berkeley and its contributors''
13: * in the documentation or other materials provided with the distribution
14: * and in all advertising materials mentioning features or use of this
15: * software. Neither the name of the University nor the names of its
16: * contributors may be used to endorse or promote products derived
17: * from this software without specific prior written permission.
18: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
19: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
20: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21: */
22:
23: #ifndef lint
24: static char sccsid[] = "@(#)lstDestroy.c 5.3 (Berkeley) 6/1/90";
25: #endif /* not lint */
26:
27: /*-
28: * LstDestroy.c --
29: * Nuke a list and all its resources
30: */
31:
32: #include "lstInt.h"
33:
34: /*-
35: *-----------------------------------------------------------------------
36: * Lst_Destroy --
37: * Destroy a list and free all its resources. If the freeProc is
38: * given, it is called with the datum from each node in turn before
39: * the node is freed.
40: *
41: * Results:
42: * None.
43: *
44: * Side Effects:
45: * The given list is freed in its entirety.
46: *
47: *-----------------------------------------------------------------------
48: */
49: void
50: Lst_Destroy (l, freeProc)
51: Lst l;
52: register void (*freeProc)();
53: {
54: register ListNode ln;
55: register ListNode tln = NilListNode;
56: register List list = (List)l;
57:
58: if (l == NILLST || ! l) {
59: /*
60: * Note the check for l == (Lst)0 to catch uninitialized static Lst's.
61: * Gross, but useful.
62: */
63: return;
64: }
65:
66: if (freeProc) {
67: for (ln = list->firstPtr;
68: ln != NilListNode && tln != list->firstPtr;
69: ln = tln) {
70: tln = ln->nextPtr;
71: (*freeProc) (ln->datum);
72: free ((Address)ln);
73: }
74: } else {
75: for (ln = list->firstPtr;
76: ln != NilListNode && tln != list->firstPtr;
77: ln = tln) {
78: tln = ln->nextPtr;
79: free ((Address)ln);
80: }
81: }
82:
83: free ((Address)l);
84: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.