ref: dc8c7bf2b73d608ac2483aee303a51a3507b4c5a
dir: /sys/src/libndb/ndbdiscard.c/
#include <u.h> #include <libc.h> #include <bio.h> #include <ndb.h> /* remove a from t and free it */ Ndbtuple* ndbdiscard(Ndbtuple *t, Ndbtuple *a) { Ndbtuple *nt; /* unchain a */ for(nt = t; nt != nil; nt = nt->entry){ if(nt->line == a) nt->line = a->line; if(nt->entry == a) nt->entry = a->entry; } /* a may be start of chain */ if(t == a) t = a->entry; /* free a */ a->entry = nil; ndbfree(a); ndbsetmalloctag(t, getcallerpc(&t)); return t; }