Annotation of 43BSDReno/contrib/isode-beta/dsap/common/dn_seq.c, revision 1.1

1.1     ! root        1: /* dn_seq.c - General Directory Name Sequence routines */
        !             2: 
        !             3: #ifndef lint
        !             4: static char *rcsid = "$Header: /f/osi/dsap/common/RCS/dn_seq.c,v 7.0 89/11/23 21:42:06 mrose Rel $";
        !             5: #endif
        !             6: 
        !             7: /*
        !             8:  * $Header: /f/osi/dsap/common/RCS/dn_seq.c,v 7.0 89/11/23 21:42:06 mrose Rel $
        !             9:  *
        !            10:  *
        !            11:  * $Log:       dn_seq.c,v $
        !            12:  * Revision 7.0  89/11/23  21:42:06  mrose
        !            13:  * Release 6.0
        !            14:  * 
        !            15:  */
        !            16: 
        !            17: /*
        !            18:  *                                NOTICE
        !            19:  *
        !            20:  *    Acquisition, use, and distribution of this module and related
        !            21:  *    materials are subject to the restrictions of a license agreement.
        !            22:  *    Consult the Preface in the User's Manual for the full terms of
        !            23:  *    this agreement.
        !            24:  *
        !            25:  */
        !            26: 
        !            27: 
        !            28: /* LINTLIBRARY */
        !            29: 
        !            30: #include "quipu/util.h"
        !            31: #include "quipu/entry.h"
        !            32: 
        !            33: dn_seq_free (dnseq)
        !            34: struct dn_seq * dnseq;
        !            35: {
        !            36: struct dn_seq * ptr;
        !            37: struct dn_seq * next;
        !            38: 
        !            39:        for (ptr=dnseq ; ptr!=NULLDNSEQ; ptr=next ) {
        !            40:                next = ptr->dns_next;
        !            41:                dn_free (ptr->dns_dn);
        !            42:                free ((char *) ptr);
        !            43:        }
        !            44: 
        !            45: }
        !            46: 
        !            47: struct dn_seq * dn_seq_cpy (dnseq)
        !            48: struct dn_seq * dnseq;
        !            49: {
        !            50: register struct dn_seq * ptr;
        !            51: struct dn_seq * ptr2;
        !            52: struct dn_seq * result = NULLDNSEQ;
        !            53: 
        !            54: 
        !            55:        for (ptr=dnseq ; ptr!=NULLDNSEQ; ptr=ptr->dns_next ) {
        !            56:                ptr2 = dn_seq_alloc();
        !            57:                ptr2 -> dns_next = result;
        !            58:                result = ptr2;
        !            59:                result->dns_dn = dn_cpy (ptr->dns_dn);
        !            60:        }
        !            61:        return (result);
        !            62: }
        !            63: 
        !            64: 
        !            65: check_dnseq (dnseq,who)
        !            66: struct dn_seq * dnseq;
        !            67: DN who;
        !            68: {
        !            69: register struct dn_seq * ptr;
        !            70: 
        !            71:        for (ptr=dnseq; ptr!=NULLDNSEQ; ptr=ptr->dns_next) {
        !            72:                if (dn_cmp (who,ptr->dns_dn) == OK)
        !            73:                        return (OK);
        !            74:        }
        !            75: 
        !            76:        return (NOTOK);
        !            77: }
        !            78: 
        !            79: dn_seq_cmp (a,b)
        !            80: struct dn_seq * a, * b;
        !            81: {
        !            82:     struct dn_seq      * dns1;
        !            83:     struct dn_seq      * dns2;
        !            84: 
        !            85:     if((a == NULLDNSEQ) && (b == NULLDNSEQ))
        !            86:        return(0);
        !            87: 
        !            88:     if(a==NULLDNSEQ)
        !            89:        return(-1);
        !            90: 
        !            91:     if(b==NULLDNSEQ)
        !            92:        return(1);
        !            93: 
        !            94:     for (dns1=a; dns1!=NULLDNSEQ; dns1=dns1->dns_next)
        !            95:     {
        !            96:        for (dns2=b; dns2!=NULLDNSEQ; dns2=dns2->dns_next)
        !            97:        {
        !            98:            if(dn_cmp (dns1->dns_dn,dns2->dns_dn) == 0)
        !            99:                break;
        !           100:        }
        !           101:        if(dns2 == NULLDNSEQ)
        !           102:            return(1);
        !           103:     }
        !           104: 
        !           105:     for (dns2=b; dns2!=NULLDNSEQ; dns2=dns2->dns_next)
        !           106:     {
        !           107:        for (dns1=a; dns1!=NULLDNSEQ; dns1=dns1->dns_next)
        !           108:        {
        !           109:            if(dn_cmp (dns1->dns_dn,dns2->dns_dn) == 0)
        !           110:                break;
        !           111:        }
        !           112:        if(dns1 == NULLDNSEQ)
        !           113:            return(-1);
        !           114:     }
        !           115: 
        !           116:     return (0);
        !           117: }
        !           118: 
        !           119: check_dnseq_prefix (dnseq,who)
        !           120: struct dn_seq * dnseq;
        !           121: DN who;
        !           122: {
        !           123: struct dn_seq * ptr;
        !           124: 
        !           125:        for (ptr=dnseq; ptr!=NULLDNSEQ; ptr=ptr->dns_next) {
        !           126:                if (dn_cmp_prefix (ptr->dns_dn,who) == OK)
        !           127:                        return (OK);
        !           128:        }
        !           129: 
        !           130:        return (NOTOK);
        !           131: }
        !           132: 
        !           133: dn_seq_print (ps,dnseq,format)
        !           134: PS ps;
        !           135: struct dn_seq * dnseq;
        !           136: int format;
        !           137: {
        !           138:         if (dnseq == NULLDNSEQ) 
        !           139:                return;
        !           140: 
        !           141:        dn_print (ps,dnseq->dns_dn,EDBOUT);
        !           142:        for (dnseq=dnseq->dns_next; dnseq!=NULLDNSEQ;  dnseq=dnseq->dns_next) {
        !           143:                if (format == READOUT)
        !           144:                        ps_print (ps," AND ");
        !           145:                else
        !           146:                        ps_print (ps,"$");
        !           147:                dn_print (ps,dnseq->dns_dn,EDBOUT);
        !           148:        }
        !           149: }
        !           150: 
        !           151: struct dn_seq * str2dnseq (str)
        !           152: register char * str;
        !           153: {
        !           154: register char *ptr;
        !           155: register char *save,val;
        !           156: struct dn_seq * dns = NULLDNSEQ;
        !           157: struct dn_seq * newdns;
        !           158: 
        !           159:        while ( (ptr = index (str,'$')) != 0) {
        !           160:                save = ptr++;
        !           161:                save--;
        !           162:                if (! isspace (*save))
        !           163:                        save++;
        !           164:                val = *save;
        !           165:                *save = 0;
        !           166:                newdns = dn_seq_alloc();
        !           167:                if ((newdns->dns_dn = str2dn (str)) == NULLDN) {
        !           168:                        dn_seq_free (dns);
        !           169:                        free ((char *) newdns);
        !           170:                        return (NULLDNSEQ);
        !           171:                }
        !           172:                newdns->dns_next = dns;
        !           173:                dns = newdns;
        !           174:                *save = val;
        !           175:                str = ptr;
        !           176:        }
        !           177: 
        !           178:        if ((ptr = rindex (str,'#')) != 0) {
        !           179:                /* a bit or reverse compatability... */
        !           180:                if (*++ptr != 0) {
        !           181:                        parse_error ("invalid # in sequence '%s'",str);
        !           182:                        dn_seq_free (dns);
        !           183:                        return (NULLDNSEQ);
        !           184:                }
        !           185:                else
        !           186:                        *--ptr = 0;
        !           187:                }
        !           188: 
        !           189:        newdns = dn_seq_alloc();
        !           190:        if ((newdns->dns_dn = str2dn (str)) == NULLDN) {
        !           191:                dn_seq_free (dns);
        !           192:                free ((char *) newdns);
        !           193:                return (NULLDNSEQ);
        !           194:        }
        !           195:        newdns->dns_next = dns;
        !           196:        dns = newdns;
        !           197: 
        !           198:        return (dns);
        !           199: }
        !           200: 
        !           201: int      dn_in_dnseq(dn, dnseq)
        !           202: DN               dn;
        !           203: struct dn_seq  * dnseq;
        !           204: {
        !           205:     struct dn_seq      * ptr;
        !           206:     register int       i = 1;
        !           207: 
        !           208:     for(ptr=dnseq; ptr!=NULLDNSEQ; ptr=ptr->dns_next, i++)
        !           209:     {
        !           210:        if(dn_cmp(dn, ptr->dns_dn) == 0)
        !           211:            break;
        !           212:     }
        !           213: 
        !           214:     if(ptr == NULLDNSEQ)
        !           215:        return(FALSE);
        !           216: 
        !           217:     return(i);
        !           218: }
        !           219: 
        !           220: struct dn_seq  * dn_seq_push(dn,dnseq)
        !           221: DN               dn;
        !           222: struct dn_seq  * dnseq;
        !           223: {
        !           224:     struct dn_seq * ret;
        !           225: 
        !           226:     ret = dn_seq_alloc();
        !           227: 
        !           228:     ret->dns_dn = dn_cpy(dn);
        !           229:     ret->dns_next = dnseq;
        !           230: 
        !           231:     return(ret);
        !           232: }
        !           233: 
        !           234: struct dn_seq  * dn_seq_pop(dnseq)
        !           235: struct dn_seq  * dnseq;
        !           236: {
        !           237:     struct dn_seq * ret;
        !           238: 
        !           239:     if(dnseq == NULLDNSEQ)
        !           240:        return(NULLDNSEQ);
        !           241: 
        !           242:     ret = dnseq->dns_next;
        !           243: 
        !           244:     dn_free(dnseq->dns_dn);
        !           245:     free((char *)dnseq);
        !           246: 
        !           247:     return(ret);
        !           248: }

unix.superglobalmegacorp.com

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