|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T l
Length: 878 (0x36e) Types: TextFile Names: »llist.c«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit └─⟦373604645⟧ »EurOpenD3/news/bnews.2.11/src.tar.Z« └─⟦3beb569ac⟧ └─⟦this⟧ »src/llist.c«
#include "llist.h" extern void free(); extern caddr_t malloc(); #define align(x) ((x) + ((x) % sizeof(long))) /* ** recursively free a linked list */ void l_free(lp) register struct llist *lp; { if (lp->l_next == NULL) return; l_free(lp->l_next); free(lp->l_item); } /* ** allocate a new element in a linked list, along with enough space ** at the end of the item for the next list element header. */ struct llist * l_alloc(lp, s, len) register struct llist *lp; caddr_t *s; register unsigned len; { if (s == NULL || lp == NULL) return(NULL); lp->l_len = len; len = align(len); if ((lp->l_item = malloc(len + sizeof(struct llist))) == NULL) return(NULL); bcopy(s, lp->l_item, len); lp->l_next = (struct llist *)(&lp->l_item[len]); /* ** set up next list entry */ lp = lp->l_next; lp->l_next = NULL; lp->l_item = NULL; lp->l_len = 0; return(lp); }