|
|
1.1 ! root 1: /* oidseq.c - OID Sequence utility routines */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/dsap/common/RCS/oidseq.c,v 7.1 89/12/19 16:19:27 mrose Exp $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/dsap/common/RCS/oidseq.c,v 7.1 89/12/19 16:19:27 mrose Exp $ ! 9: * ! 10: * ! 11: * $Log: oidseq.c,v $ ! 12: * Revision 7.1 89/12/19 16:19:27 mrose ! 13: * sync ! 14: * ! 15: * Revision 7.0 89/11/23 21:42:36 mrose ! 16: * Release 6.0 ! 17: * ! 18: */ ! 19: ! 20: /* ! 21: * NOTICE ! 22: * ! 23: * Acquisition, use, and distribution of this module and related ! 24: * materials are subject to the restrictions of a license agreement. ! 25: * Consult the Preface in the User's Manual for the full terms of ! 26: * this agreement. ! 27: * ! 28: */ ! 29: ! 30: ! 31: /* LINTLIBRARY */ ! 32: ! 33: #include "quipu/util.h" ! 34: #include "quipu/entry.h" ! 35: ! 36: extern int oidformat; ! 37: ! 38: oid_seq_free (ptr) ! 39: struct oid_seq * ptr; ! 40: { ! 41: register struct oid_seq * loop; ! 42: register struct oid_seq * next; ! 43: ! 44: for (loop=ptr; loop!=NULLOIDSEQ; loop=next) { ! 45: next = loop->oid_next; ! 46: oid_free (loop->oid_oid); ! 47: free ((char *) loop); ! 48: } ! 49: } ! 50: ! 51: struct oid_seq *oid_seq_merge (a,b) ! 52: struct oid_seq *a; ! 53: struct oid_seq *b; ! 54: { ! 55: register struct oid_seq *aptr, *bptr, *result, *trail; ! 56: ! 57: if ( a == NULLOIDSEQ ) ! 58: return (b); ! 59: if ( b == NULLOIDSEQ ) ! 60: return (a); ! 61: ! 62: /* start sequence off, make sure 'a' is the first */ ! 63: switch (oid_cmp (a->oid_oid,b->oid_oid)) { ! 64: case 0: /* equal */ ! 65: result = a; ! 66: oid_free (b->oid_oid); ! 67: free ((char *) b); ! 68: aptr = a->oid_next; ! 69: bptr = b->oid_next; ! 70: break; ! 71: case -1: ! 72: result = b; ! 73: aptr = a; ! 74: bptr = b->oid_next; ! 75: break; ! 76: case 1: ! 77: result = a; ! 78: aptr = a->oid_next; ! 79: bptr = b; ! 80: break; ! 81: } ! 82: ! 83: trail = result; ! 84: while ( (aptr != NULLOIDSEQ) && (bptr != NULLOIDSEQ) ) { ! 85: ! 86: switch (oid_cmp (aptr->oid_oid,bptr->oid_oid)) { ! 87: case 0: /* equal */ ! 88: trail->oid_next = aptr; ! 89: trail = aptr; ! 90: oid_free (bptr->oid_oid); ! 91: free ((char *) bptr); ! 92: aptr = aptr->oid_next; ! 93: bptr = bptr->oid_next; ! 94: break; ! 95: case -1: ! 96: trail->oid_next = bptr; ! 97: trail = bptr; ! 98: bptr = bptr->oid_next; ! 99: break; ! 100: case 1: ! 101: trail->oid_next = aptr; ! 102: trail = aptr; ! 103: aptr = aptr->oid_next; ! 104: break; ! 105: } ! 106: } ! 107: if (aptr == NULLOIDSEQ) ! 108: trail->oid_next = bptr; ! 109: else ! 110: trail->oid_next = aptr; ! 111: ! 112: return (result); ! 113: } ! 114: ! 115: oid_seq_cmp (a,b) ! 116: struct oid_seq *a, *b; ! 117: { ! 118: struct oid_seq * aa1; ! 119: struct oid_seq * aa2; ! 120: ! 121: if((a == NULLOIDSEQ) && (b == NULLOIDSEQ)) ! 122: return(0); ! 123: ! 124: if(a == NULLOIDSEQ) ! 125: return(-1); ! 126: ! 127: if(b == NULLOIDSEQ) ! 128: return(1); ! 129: ! 130: for(aa1=a; aa1 != NULLOIDSEQ; aa1=aa1->oid_next) ! 131: { ! 132: for(aa2=b; aa2 != NULLOIDSEQ; aa2=aa2->oid_next) ! 133: { ! 134: if(oid_cmp(aa1->oid_oid, aa2->oid_oid) == 0) ! 135: break; ! 136: } ! 137: if(aa2 == NULLOIDSEQ) ! 138: return(1); ! 139: } ! 140: ! 141: for(aa2=b; aa2 != NULLOIDSEQ; aa2=aa2->oid_next) ! 142: { ! 143: for(aa1=a; aa1 != NULLOIDSEQ; aa1=aa1->oid_next) ! 144: { ! 145: if(oid_cmp(aa1->oid_oid, aa2->oid_oid) == 0) ! 146: break; ! 147: } ! 148: if(aa1 == NULLOIDSEQ) ! 149: return(-1); ! 150: } ! 151: ! 152: return(0); ! 153: } ! 154: ! 155: struct oid_seq * oid_seq_cpy (a) ! 156: struct oid_seq * a; ! 157: { ! 158: register struct oid_seq * b; ! 159: register struct oid_seq * c; ! 160: register struct oid_seq * d; ! 161: struct oid_seq * result; ! 162: ! 163: result = oid_seq_alloc (); ! 164: result -> oid_oid = oid_cpy (a->oid_oid); ! 165: result -> oid_next = NULLOIDSEQ; ! 166: b = result; ! 167: ! 168: for (c=a->oid_next; c!=NULLOIDSEQ; c=c->oid_next) { ! 169: d = oid_seq_alloc (); ! 170: d-> oid_oid = oid_cpy (c->oid_oid); ! 171: d-> oid_next = NULLOIDSEQ; ! 172: b-> oid_next = d; ! 173: b = d; ! 174: } ! 175: return (result); ! 176: } ! 177: ! 178: oid_seq_print (ps,ptr,format) ! 179: PS ps; ! 180: register struct oid_seq * ptr; ! 181: int format; ! 182: { ! 183: ps_printf (ps,"%s",oid2name (ptr->oid_oid,oidformat)); ! 184: for ( ptr=ptr->oid_next; ptr!= NULLOIDSEQ; ptr=ptr->oid_next) ! 185: if ( format == READOUT ) ! 186: ps_printf (ps," AND %s",oid2name (ptr->oid_oid,oidformat)); ! 187: else ! 188: ps_printf (ps,"$%s",oid2name (ptr->oid_oid,oidformat)); ! 189: } ! 190: ! 191: struct oid_seq * str2oidseq (str) ! 192: char * str; ! 193: { ! 194: register char *ptr; ! 195: register char *save,val; ! 196: struct oid_seq * ois = NULLOIDSEQ; ! 197: struct oid_seq * newois; ! 198: OID oid; ! 199: char * SkipSpace(); ! 200: ! 201: while ( (ptr = index (str,'$')) != 0) { ! 202: save = ptr++; ! 203: save--; ! 204: if (! isspace (*save)) ! 205: save++; ! 206: val = *save; ! 207: *save = 0; ! 208: newois = oid_seq_alloc(); ! 209: if ((oid = name2oid (SkipSpace(str))) == NULLOID) { ! 210: parse_error ("invaild name in sequence %s",str); ! 211: oid_seq_free (ois); ! 212: free ((char *) newois); ! 213: return (NULLOIDSEQ); ! 214: } ! 215: newois->oid_oid = oid_cpy(oid); ! 216: newois->oid_next = ois; ! 217: ois = newois; ! 218: *save = val; ! 219: str = ptr; ! 220: } ! 221: ! 222: newois = oid_seq_alloc(); ! 223: if ((oid = name2oid (SkipSpace(str))) == NULLOID) { ! 224: parse_error ("invaild name in sequence %s",str); ! 225: oid_seq_free (ois); ! 226: free ((char *) newois); ! 227: return (NULLOIDSEQ); ! 228: } ! 229: newois->oid_oid = oid_cpy(oid); ! 230: newois->oid_next = ois; ! 231: ois = newois; ! 232: ! 233: return (ois); ! 234: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.