xref: /plan9-contrib/sys/src/libndb/ndbdiscard.c (revision 1a4050f5b2ddf426a278e3233ccd7b6bcb0639b8)
195a264b3SDavid du Colombier #include <u.h>
295a264b3SDavid du Colombier #include <libc.h>
395a264b3SDavid du Colombier #include <bio.h>
495a264b3SDavid du Colombier #include <ndb.h>
595a264b3SDavid du Colombier 
695a264b3SDavid du Colombier /* remove a from t and free it */
795a264b3SDavid du Colombier Ndbtuple*
ndbdiscard(Ndbtuple * t,Ndbtuple * a)895a264b3SDavid du Colombier ndbdiscard(Ndbtuple *t, Ndbtuple *a)
995a264b3SDavid du Colombier {
1095a264b3SDavid du Colombier 	Ndbtuple *nt;
1195a264b3SDavid du Colombier 
1295a264b3SDavid du Colombier 	/* unchain a */
1395a264b3SDavid du Colombier 	for(nt = t; nt != nil; nt = nt->entry){
1495a264b3SDavid du Colombier 		if(nt->line == a)
1595a264b3SDavid du Colombier 			nt->line = a->line;
1695a264b3SDavid du Colombier 		if(nt->entry == a)
1795a264b3SDavid du Colombier 			nt->entry = a->entry;
1895a264b3SDavid du Colombier 	}
1995a264b3SDavid du Colombier 
2095a264b3SDavid du Colombier 	/* a may be start of chain */
2195a264b3SDavid du Colombier 	if(t == a)
2295a264b3SDavid du Colombier 		t = a->entry;
2395a264b3SDavid du Colombier 
2495a264b3SDavid du Colombier 	/* free a */
2595a264b3SDavid du Colombier 	a->entry = nil;
2695a264b3SDavid du Colombier 	ndbfree(a);
2795a264b3SDavid du Colombier 
28*1a4050f5SDavid du Colombier 	ndbsetmalloctag(t, getcallerpc(&t));
2995a264b3SDavid du Colombier 	return t;
3095a264b3SDavid du Colombier }
31