|
|
1.1 ! root 1: /* $Header: CHstrtoname.c,v 2.1 87/03/10 17:22:06 jqj Exp $ */ ! 2: ! 3: /* contains: ! 4: * CH_NameToString ! 5: * CH_StringToName ! 6: */ ! 7: ! 8: /* $Log: CHstrtoname.c,v $ ! 9: * Revision 2.1 87/03/10 17:22:06 jqj ! 10: * added CH_NameToString ! 11: * ! 12: * Revision 2.0 85/11/21 07:22:34 jqj ! 13: * 4.3BSD standard release ! 14: * ! 15: * Revision 1.1 85/03/26 06:27:02 jqj ! 16: * Initial revision ! 17: * ! 18: * Revision 1.1 85/03/26 06:27:02 jqj ! 19: * Initial revision ! 20: * ! 21: */ ! 22: ! 23: #include <xnscourier/Clearinghouse2.h> ! 24: ! 25: static char *copy(); ! 26: ! 27: /* ! 28: * Given an ObjectName, produce a string in standard format. ! 29: * N.B. should escape ":" in the components! ! 30: */ ! 31: char * ! 32: CH_NameToString(chs_name) ! 33: Clearinghouse2_ObjectName chs_name; ! 34: { ! 35: static char buf[84]; ! 36: extern char *sprintf(); ! 37: return sprintf(buf,"%.40s:%.20s:%.20s", ! 38: chs_name.object, ! 39: chs_name.domain, ! 40: chs_name.organization); ! 41: } ! 42: ! 43: /* ! 44: * Given a string in standard format, return an ObjectName. ! 45: * If the string is incomplete, e.g. "jqj" or "::cornell-univ", fill ! 46: * in default values from defaults. ! 47: * N.B. should handle escaped ":" in the compenents. ! 48: */ ! 49: Clearinghouse2_ObjectName ! 50: CH_StringToName(str,defaults) ! 51: char *str; ! 52: Clearinghouse2_ObjectName *defaults; ! 53: { ! 54: register char *s1; ! 55: extern char *index(); ! 56: register Clearinghouse2_ObjectName result; ! 57: ! 58: s1 = result.object = (str ? copy(str) : ""); ! 59: if (s1 = index(s1,':')) { ! 60: *s1 = '\0'; ! 61: result.domain = ++s1; ! 62: if (s1 = index(s1,':')) { ! 63: *s1 = '\0'; ! 64: result.organization = ++s1; ! 65: } ! 66: else ! 67: result.organization = ""; ! 68: } ! 69: else ! 70: result.organization = result.domain = ""; ! 71: /* now fill in defaults if any */ ! 72: if (defaults == (Clearinghouse2_ObjectName*) NULL) ! 73: return(result); ! 74: if (*result.object == '\0' && defaults->object != NULL) ! 75: result.object = copy(defaults->object); ! 76: if (*result.domain == '\0' && defaults->domain != NULL) ! 77: result.domain = copy(defaults->domain); ! 78: if (*result.organization == '\0' && defaults->organization != NULL) ! 79: result.organization = copy(defaults->organization); ! 80: return(result); ! 81: } ! 82: ! 83: ! 84: static char * ! 85: copy(s) ! 86: char *s; ! 87: { ! 88: char *p; ! 89: extern char *malloc(); ! 90: ! 91: if ((p = malloc(strlen(s) + 1)) == NULL) { ! 92: exit(1); ! 93: } ! 94: (void) strcpy(p, s); ! 95: return (p); ! 96: } ! 97:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.