|
|
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.