projects
/
unix-history
/ blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
blame
|
history
|
raw
|
HEAD
BSD 4_3_Net_2 development
[unix-history]
/
usr
/
src
/
contrib
/
isode
/
dsap
/
common
/
rdn_merge.c
#include
"quipu/util.h"
#include
"quipu/name.h"
RDN
rdn_merge
(
a
,
b
)
RDN a
,
b
;
{
register
RDN aptr
,
bptr
,
result
,
trail
;
if
(
a
==
NULLRDN
)
return
(
b
);
if
(
b
==
NULLRDN
)
return
(
a
);
/* start sequence off, make sure 'a' is the first */
switch
(
rdn_cmp_comp
(
a
,
b
)) {
case
0
:
/* equal */
result
=
a
;
aptr
=
a
->
rdn_next
;
rdn_comp_free
(
b
);
bptr
=
b
->
rdn_next
;
break
;
case
-
1
:
result
=
b
;
aptr
=
a
;
bptr
=
b
->
rdn_next
;
break
;
case
1
:
result
=
a
;
aptr
=
a
->
rdn_next
;
bptr
=
b
;
break
;
}
trail
=
result
;
while
( (
aptr
!=
NULLRDN
) && (
bptr
!=
NULLRDN
) ) {
switch
(
rdn_cmp_comp
(
aptr
,
bptr
)) {
case
0
:
/* equal */
trail
->
rdn_next
=
aptr
;
trail
=
aptr
;
rdn_comp_free
(
bptr
);
aptr
=
aptr
->
rdn_next
;
bptr
=
bptr
->
rdn_next
;
break
;
case
-
1
:
trail
->
rdn_next
=
bptr
;
trail
=
bptr
;
bptr
=
bptr
->
rdn_next
;
break
;
case
1
:
trail
->
rdn_next
=
aptr
;
trail
=
aptr
;
aptr
=
aptr
->
rdn_next
;
break
;
}
}
if
(
aptr
==
NULLRDN
)
trail
->
rdn_next
=
bptr
;
else
trail
->
rdn_next
=
aptr
;
return
(
result
);
}