File:  [CSRG BSD Unix] / 43BSDReno / contrib / isode-beta / dsap / common / rdn_merge.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 16:12:56 2018 UTC (8 years, 1 month ago) by root
Branches: MAIN, BSD
CVS tags: HEAD, BSD43reno
BSD 4.3reno

#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);
}


unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.