1: #include "llist.h"
2:
3: extern void free();
4: extern caddr_t malloc();
5:
6: #define align(x) ((x) + ((x) % sizeof(long)))
7:
8: /*
9: ** recursively free a linked list
10: */
11: void
12: l_free(lp)
13: register struct llist *lp;
14: {
15: if (lp->l_next == NULL)
16: return;
17: l_free(lp->l_next);
18: free(lp->l_item);
19: }
20:
21: /*
22: ** allocate a new element in a linked list, along with enough space
23: ** at the end of the item for the next list element header.
24: */
25: struct llist *
26: l_alloc(lp, s, len)
27: register struct llist *lp;
28: caddr_t *s;
29: register unsigned len;
30: {
31: if (s == NULL || lp == NULL)
32: return(NULL);
33:
34: lp->l_len = len;
35: len = align(len);
36:
37: if ((lp->l_item = malloc(len + sizeof(struct llist))) == NULL)
38: return(NULL);
39:
40: bcopy(s, lp->l_item, len);
41: lp->l_next = (struct llist *)(&lp->l_item[len]);
42:
43: /*
44: ** set up next list entry
45: */
46: lp = lp->l_next;
47: lp->l_next = NULL;
48: lp->l_item = NULL;
49: lp->l_len = 0;
50: return(lp);
51: }
Defined functions
Defined macros
align
defined in line
6; used 1 times