|
|
1.1 root 1: #include "quipu/util.h"
2: #include "quipu/name.h"
3:
4: RDN rdn_merge (a,b)
5: RDN a,b;
6: {
7: register RDN aptr, bptr, result, trail;
8:
9: if ( a == NULLRDN )
10: return (b);
11: if ( b == NULLRDN )
12: return (a);
13:
14: /* start sequence off, make sure 'a' is the first */
15: switch (rdn_cmp_comp (a,b)) {
16: case 0: /* equal */
17: result = a;
18: aptr = a->rdn_next;
19: rdn_comp_free (b);
20: bptr = b->rdn_next;
21: break;
22: case -1:
23: result = b;
24: aptr = a;
25: bptr = b->rdn_next;
26: break;
27: case 1:
28: result = a;
29: aptr = a->rdn_next;
30: bptr = b;
31: break;
32: }
33:
34: trail = result;
35: while ( (aptr != NULLRDN) && (bptr != NULLRDN) ) {
36:
37: switch (rdn_cmp_comp (aptr,bptr)) {
38: case 0: /* equal */
39: trail->rdn_next = aptr;
40: trail = aptr;
41: rdn_comp_free (bptr);
42: aptr = aptr->rdn_next;
43: bptr = bptr->rdn_next;
44: break;
45: case -1:
46: trail->rdn_next = bptr;
47: trail = bptr;
48: bptr = bptr->rdn_next;
49: break;
50: case 1:
51: trail->rdn_next = aptr;
52: trail = aptr;
53: aptr = aptr->rdn_next;
54: break;
55: }
56: }
57: if (aptr == NULLRDN)
58: trail->rdn_next = bptr;
59: else
60: trail->rdn_next = aptr;
61:
62: return (result);
63: }
64:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.