DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T s

⟦2449d53b2⟧ TextFile

    Length: 3057 (0xbf1)
    Types: TextFile
    Names: »syn_orname.c«

Derivation

└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
    └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« 
        └─⟦e5a54fb17⟧ 
            └─⟦this⟧ »pp-5.0/Chans/dirlist/syn_orname.c« 

TextFile

/* syn_orname.c: */

# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Chans/dirlist/RCS/syn_orname.c,v 5.0 90/09/20 15:46:10 pp Exp Locker: pp $";
# endif

/*
 * $Header: /cs/research/pp/hubris/pp-beta/Chans/dirlist/RCS/syn_orname.c,v 5.0 90/09/20 15:46:10 pp Exp Locker: pp $
 *
 * $Log:	syn_orname.c,v $
 * Revision 5.0  90/09/20  15:46:10  pp
 * rcsforce : 5.0 public release
 * 
 */



/* LINTLIBRARY */

#include "util.h"
#include <varargs.h>
#include "retcode.h"
#include "adr.h"
#include "ap.h"
#include "dlist.h"

extern OR_ptr orAddr_parse();
extern OR_ptr or_cpy();

orName_free (a)
ORName * a;
{
	if (a->on_dn != NULLDN)
		dn_free (a->on_dn);

	if (a->on_or != NULLOR)
		or_free (a->on_or);

	free ((char *) a);
}

ORName * orName_parse (str)
char * str;
{
ORName * or;
char * ptr;

	or = (ORName *) smalloc (sizeof (ORName));

	if ( (ptr=index (str,'$')) == NULLCP) {
		if ((or->on_dn = str2dn (str)) == NULLDN)
			return (NULLORName);
		or->on_or = NULLOR;
		return or;
	}

	*ptr--= 0;
	if (isspace (*ptr)) {
		*ptr = 0;
	}
	ptr++;
	ptr++;

	if (*str == 0)
		or->on_dn = NULLDN;
	else
		if ((or->on_dn = str2dn (str)) == NULLDN)
			return (NULLORName);

	ptr = SkipSpace(ptr);	
	if (*ptr == 0)
		or->on_or = NULLOR;
	else if ((or->on_or = orAddr_parse (ptr)) == NULLOR)
		return (NULLORName);
	
	return (or);
}

orName_print (ps,or,format)
PS ps;
ORName * or;
int format;
{
	if (or->on_dn != NULLDN) {

		dn_print (ps,or->on_dn,format);

		if ((format == UFNOUT) || format == READOUT) 
			return;
	}

	if ((format != READOUT) && (format != UFNOUT))
		ps_print (ps," $ ");
	else if (or->on_dn == NULLDN)
		ps_print (ps,"X.400 Address: ");

	if (or->on_or)
		orAddr_print (ps,or->on_or,format);

}

ORName * orName_cpy (a)
ORName * a;
{
ORName * top;

	top = (ORName *) smalloc (sizeof (ORName));
	top->on_or = or_cpy (a->on_or);
	top->on_dn = dn_cpy (a->on_dn);

	return (top);
}

orName_cmp (a,b)
ORName *a, *b;
{
int res;
	if ( a == NULLORName)
		return (b == NULLORName ? 0 : -1);
	if ( b == NULLORName)
		return 	1;

	if ((res = dn_cmp (a->on_dn,b->on_dn)) == 0) 
 		return orAddr_cmp (a->on_or,b->on_or);
	else
		return res;
}

orName_cmp_user (a,b)
ORName *a, *b;
{
	/* IF DN's equal -> match OK */

	if ((a->on_dn == NULLDN) || (b->on_dn == NULLDN))
 		return orAddr_cmp (a->on_or,b->on_or);

	return dn_cmp (a->on_dn,b->on_dn);
}

static ORName * orName_dec (pe)
PE pe;
{
ORName * m;

	m = (ORName *) smalloc (sizeof (ORName));
	bzero ((char *)m,sizeof (ORName));

	if (decode_MAS_ORName (pe,1,NULLIP,NULLVP,m) == NOTOK) {
		free ((char *)m);
		return (NULLORName);
	}

#if ISODE < 65
	if (m->on_dn != NULLDN)
		(void) dn_decode (m->on_dn);
#endif

	return (m);
}

static PE orName_enc (m)
ORName * m;
{
PE ret_pe;

        (void) encode_MAS_ORName (&ret_pe,0,0,NULLCP,m);

	return (ret_pe);
}

orName_syntax ()
{
	(void) add_attribute_syntax ("ORName",
		(IFP) orName_enc,	(IFP) orName_dec,
		(IFP) orName_parse,	orName_print,
		(IFP) orName_cpy,	orName_cmp,
		orName_free,		NULLCP,
		NULLIFP,		TRUE);
}