xref: /plan9-contrib/sys/src/libndb/ndbdiscard.c (revision 1a4050f5b2ddf426a278e3233ccd7b6bcb0639b8)
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include <ndb.h>
5 
6 /* remove a from t and free it */
7 Ndbtuple*
ndbdiscard(Ndbtuple * t,Ndbtuple * a)8 ndbdiscard(Ndbtuple *t, Ndbtuple *a)
9 {
10 	Ndbtuple *nt;
11 
12 	/* unchain a */
13 	for(nt = t; nt != nil; nt = nt->entry){
14 		if(nt->line == a)
15 			nt->line = a->line;
16 		if(nt->entry == a)
17 			nt->entry = a->entry;
18 	}
19 
20 	/* a may be start of chain */
21 	if(t == a)
22 		t = a->entry;
23 
24 	/* free a */
25 	a->entry = nil;
26 	ndbfree(a);
27 
28 	ndbsetmalloctag(t, getcallerpc(&t));
29 	return t;
30 }
31