ref: 1b2249dec883624e892a6c2c6187f553adfb3364
dir: /list.c/
#include <u.h> #include <libc.h> #include "dat.h" #include "fns.h" int listallocs; void listfree(List **lp) { List *l, *n; for(l = *lp; l != nil; l = n){ n = l->next; free(l); listallocs--; } *lp = nil; } int listadd(List **lp, void *val) { List *l; for(l = *lp; l != nil; l = l->next) if(l->val == val) break; if(l != nil) return 0; l = emalloc(sizeof(List)); listallocs++; l->val = val; l->next = *lp; *lp = l; return 1; } int listdel(List **lp, void *val) { List *l, *prev; prev = nil; for(l = *lp; l != nil; l = l->next){ if(l->val == val) break; prev = l; } if(l == nil) return 0; if(prev == nil) *lp = l->next; else prev->next = l->next; free(l); listallocs--; return 1; }