Blame


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