|
|
1.1 ! root 1: /* ode2oid.c - object descriptor to object identifier */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/psap/RCS/ode2oid.c,v 7.2 90/07/09 14:43:45 mrose Exp $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/psap/RCS/ode2oid.c,v 7.2 90/07/09 14:43:45 mrose Exp $ ! 9: * ! 10: * ! 11: * $Log: ode2oid.c,v $ ! 12: * Revision 7.2 90/07/09 14:43:45 mrose ! 13: * sync ! 14: * ! 15: * Revision 1.1.1.2 90/06/07 08:03:26 isode ! 16: * ISODE 6.1 beta ! 17: * ! 18: * Revision 7.0 89/11/23 22:12:48 mrose ! 19: * Release 6.0 ! 20: * ! 21: */ ! 22: ! 23: /* ! 24: * NOTICE ! 25: * ! 26: * Acquisition, use, and distribution of this module and related ! 27: * materials are subject to the restrictions of a license agreement. ! 28: * Consult the Preface in the User's Manual for the full terms of ! 29: * this agreement. ! 30: * ! 31: */ ! 32: ! 33: ! 34: /* LINTLIBRARY */ ! 35: ! 36: #include <stdio.h> ! 37: #include "psap.h" ! 38: #include "ppkt.h" ! 39: ! 40: /* work around define collisions */ ! 41: #undef missingP ! 42: #undef pylose ! 43: #include "rtpkt.h" ! 44: ! 45: /* work around type clashes */ ! 46: #undef missingP ! 47: #undef pylose ! 48: #undef toomuchP ! 49: #define ACSE ! 50: #define assocblk assocblkxxx ! 51: #define newacblk newacblkxxx ! 52: #define findacblk findacblkxxx ! 53: #include "acpkt.h" ! 54: ! 55: /* */ ! 56: #define ODECACHESIZE 10 ! 57: static struct la_cache { ! 58: char *descriptor; ! 59: int ref; ! 60: OID oid; ! 61: } Cache[ODECACHESIZE]; ! 62: ! 63: static void preloadcache (str) ! 64: char *str; ! 65: { ! 66: struct la_cache *cp = &Cache[0]; ! 67: register struct isobject *io; ! 68: ! 69: (void) setisobject (0); ! 70: while (io = getisobject ()) { ! 71: if (strcmp (str, io -> io_descriptor) == 0 || ! 72: strcmp (DFLT_ASN, io -> io_descriptor) == 0 || ! 73: strcmp (AC_ASN, io -> io_descriptor) == 0 || ! 74: strcmp (BER, io -> io_descriptor) == 0 || ! 75: strcmp (RT_ASN, io -> io_descriptor) == 0) { ! 76: if ((cp -> oid = oid_cpy (&io -> io_identity)) == NULLOID || ! 77: (cp -> descriptor = malloc ((unsigned) (strlen (io -> io_descriptor) + 1))) ! 78: == NULLCP) { ! 79: if (cp -> oid) { ! 80: oid_free (cp -> oid); ! 81: cp -> oid = NULLOID; ! 82: } ! 83: } ! 84: else { ! 85: (void) strcpy (cp -> descriptor, io -> io_descriptor); ! 86: cp -> ref = 1; ! 87: cp ++; ! 88: } ! 89: } ! 90: } ! 91: (void) endisobject (); ! 92: } ! 93: ! 94: OID ode2oid (descriptor) ! 95: char *descriptor; ! 96: { ! 97: register struct isobject *io; ! 98: int i, least; ! 99: struct la_cache *cp, *cpn; ! 100: static char firsttime = 0; ! 101: ! 102: if (firsttime == 0) { ! 103: preloadcache (descriptor); ! 104: firsttime = 1; ! 105: } ! 106: ! 107: least = Cache[0].ref; ! 108: for (cpn = cp = &Cache[0], i = 0; i < ODECACHESIZE; i++, cp++) { ! 109: if (cp -> ref < least) { ! 110: least = cp -> ref; ! 111: cpn = cp; ! 112: } ! 113: if (cp -> ref <= 0) ! 114: continue; ! 115: if (strcmp (descriptor, cp -> descriptor) == 0) { ! 116: cp -> ref ++; ! 117: return cp -> oid; ! 118: } ! 119: } ! 120: ! 121: if ((io = getisobjectbyname (descriptor)) == NULL) ! 122: return NULLOID; ! 123: ! 124: if (cpn -> oid) ! 125: oid_free (cpn -> oid); ! 126: if (cpn -> descriptor) ! 127: free (cpn -> descriptor); ! 128: ! 129: cpn -> ref = 1; ! 130: if ((cpn -> oid = oid_cpy (&io -> io_identity)) == NULLOID || ! 131: (cpn -> descriptor = malloc ((unsigned) (strlen (descriptor) + 1))) == NULLCP) { ! 132: if (cpn -> oid) { ! 133: oid_free (cpn -> oid); ! 134: cpn -> oid = NULLOID; ! 135: } ! 136: cpn -> ref = 0; ! 137: } ! 138: else ! 139: (void) strcpy (cpn -> descriptor, descriptor); ! 140: ! 141: return (&io -> io_identity); ! 142: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.