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 m

⟦b7779e8bb⟧ TextFile

    Length: 4382 (0x111e)
    Types: TextFile
    Names: »moid.c«

Derivation

└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
    └─⟦e83f91978⟧ »EurOpenD22/isode/osimis-2.0.tar.Z« 
        └─⟦d846658bd⟧ 
            └─⟦this⟧ »osimis/msap/moid.c« 

TextFile

#include <stdio.h>
#include <isode/quipu/name.h>
#include <isode/rosap.h>
#include "msap.h"

/* Routines that maintain compatibility with the old naming scheme */

/*
 * By George Pavlou, April 1990
 */

/* LINTLIBRARY */

RDN  moid2rdn (moid)
MO_ID * moid;
{
    AttributeType rdntype;
    AttributeValue rdnval;
    char buf[sizeof(int)+1];

    if (moid == (MO_ID *) NULL)
	return NULLRDN;
    rdntype = str2AttrT(sprintoid(&moid -> rdntype));
    if (moid -> rdnlen == 0)
	rdnval = str2AttrV("<NULL>", str2syntax("IA5String"));
    else
	switch ((int) moid -> rdnval[0]) {
	case 0:
	    (void) sprintf(buf, "%d", *(int*) &moid -> rdnval[1]);
	    rdnval = str2AttrV(buf, str2syntax("Integer"));
	    break;
	case 1:
	    rdnval = str2AttrV(&moid -> rdnval[1], str2syntax("IA5String"));
	    break;
	default:
	    (void) fprintf(stderr, "moid2rdn: unknown value %d\n",
						(int) moid -> rdnval[0] );
	    return NULLRDN;
 	}
    return rdn_comp_new(rdntype, rdnval);
}


MO_ID *  rdn2moid (rdn)
RDN  rdn;
{
    MO_ID * moid;
    PS ps;
    char * buf;
    OID oid_copy();

    if (rdn == NULLRDN)
	return (MO_ID *) NULL;
    if ( (moid = (MO_ID *) calloc(1, sizeof(MO_ID))) == NULL
	    || (ps = ps_alloc(str_open)) == NULLPS
	    || str_setup(ps, NULLCP, BUFSIZ, 0) == NOTOK )
	return (MO_ID *) NULL;

    if (rdn -> rdn_at.at_oid != NULLOID) {
	if (oid_copy(rdn -> rdn_at.at_oid, &moid -> rdntype) == NULLOID)
	    return (MO_ID *) NULL;
    }
    else
    if (rdn -> rdn_at.at_table -> oa_ot.ot_oid != NULLOID) {
	if (oid_copy(rdn -> rdn_at.at_table -> oa_ot.ot_oid, &moid -> rdntype)
			== NULLOID)
	    return (MO_ID *) NULL;
    }
    else {
	(void) fprintf(stderr, "rdn2moid: rdn has no OID!\n");
	return (MO_ID *) NULL;
    }

    AttrV_print(ps, &rdn -> rdn_av, EDBOUT);
    *ps->ps_ptr = NULL;
    if ((buf = strdup(ps->ps_base)) == NULLCP) {
	ps_free (ps);
	return (MO_ID *) NULL;
    }
    ps_free (ps);

    if (rdn -> rdn_av.av_syntax == str2syntax("Integer")) {
	int val = atoi(buf);
	moid -> rdnlen = sizeof(int) + 1;
	moid -> rdnval[0] = (char) 0;
	bcopy((char *) &val, &moid -> rdnval[1], sizeof(int));
    }
    else
    if (rdn -> rdn_av.av_syntax == str2syntax("IA5String")) {
	if (strcmp(buf, "<NULL>") == 0)
	    moid -> rdnlen = 0;
	else {
	    moid -> rdnval[0] = (char) 1;
	    moid -> rdnlen = strlen(buf) + 1;
	    (void) strncpy(&moid -> rdnval[1], buf, 9);
	}
    }
    else {
	(void) fprintf(stderr, "rdn2moid: unknown value type %d\n",
					rdn -> rdn_av.av_syntax);
	return (MO_ID *) NULL;
    }

    free(buf);
    return moid;
}


DN  moid2dn (moid)
MO_ID * moid;
{
    DN  dn = NULLDN, this;
    RDN rdn;
    int first = 1;
    for (; moid; moid = moid -> Next) {
	if ((rdn = moid2rdn(moid)) == NULLRDN)
	    return NULLDN;
	if (first)
	    dn = this = dn_comp_new(rdn), first = 0;
	else
	    this = this -> dn_parent = dn_comp_new(rdn);
    }
    return dn;
}


MO_ID *  dn2moid (dn)
DN  dn;
{
    MO_ID * moid = (MO_ID *) NULL, * this;
    int first = 1;
    for (; dn; dn = dn -> dn_parent)
	if (first) {
	    if ((moid = this = rdn2moid(dn -> dn_rdn)) == NULL)
		return (MO_ID *) NULL;
	    first = 0;
	}
	else
	if ((this = this -> Next = rdn2moid(dn -> dn_rdn)) == NULL)
	    return (MO_ID *) NULL;
    return moid;
}


char *  dn2str (dn)
DN dn;
{
    PS ps;
    char * buf;

    if (((ps = ps_alloc(str_open)) == NULLPS) ||
		(str_setup(ps, NULLCP, BUFSIZ, 0) == NOTOK))
	return NULLCP;

    dn_print(ps, dn, EDBOUT);
    *ps->ps_ptr = NULL;
    if ((buf = strdup(ps->ps_base)) == NULLCP) {
	ps_free(ps);
	return NULLCP;
    }
    ps_free(ps);

    return buf;
}


void  moid_free (moid)
MO_ID * moid;
{
    register MO_ID * this;

    for (; moid;) {
	moid = (this = moid) -> Next;
	free((char *) this -> rdntype.oid_elements);
	free((char *) this);
    }
}


void  moid_print (moid)
MO_ID * moid;
{
    for (; moid; moid = moid -> Next) {
	(void) fprintf(stdout, "%s=", sprintoid(&moid -> rdntype));
	if ( moid -> rdnlen == 0)
	    (void) fprintf(stdout, "<NULL>");
	else
	    switch (moid -> rdnval[0]) {
	    case 0:
		(void) fprintf(stdout, "%d", *(int*) &moid -> rdnval[1]);
		break;

	    case 1:
		(void) fprintf(stdout, "\"%.9s\"", &moid -> rdnval[1]);
		break;

	    default:
		(void) fprintf(stdout, "UNKNOWN");
		break;
	    }
	if (moid -> Next)
	    (void) fprintf(stdout, "@");
    }
    (void) fprintf(stdout, "\n");
}