Blob
1 #include <u.h>2 #include <libc.h>3 #include <bio.h>4 #include <ndb.h>6 /* replace a in t with b, the line structure in b is lost, c'est la vie */7 Ndbtuple*8 ndbsubstitute(Ndbtuple *t, Ndbtuple *a, Ndbtuple *b)9 {10 Ndbtuple *nt;12 if(a == b)13 return t;14 if(b == nil)15 return ndbdiscard(t, a);17 /* all pointers to a become pointers to b */18 for(nt = t; nt != nil; nt = nt->entry){19 if(nt->line == a)20 nt->line = b;21 if(nt->entry == a)22 nt->entry = b;23 }25 /* end of b chain points to a's successors */26 for(nt = b; nt->entry; nt = nt->entry){27 nt->line = nt->entry;28 }29 nt->line = a->line;30 nt->entry = a->entry;32 a->entry = nil;33 ndbfree(a);35 if(a == t)36 return b;37 else38 return t;39 }