|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.