BSD 4_3_Tahoe development
[unix-history] / usr / src / new / xns / morexnslib / ch / CHstrtoname.c
/* $Header: CHstrtoname.c,v 2.1 87/03/10 17:22:06 jqj Exp $ */
/* contains:
* CH_NameToString
* CH_StringToName
*/
/* $Log: CHstrtoname.c,v $
* Revision 2.1 87/03/10 17:22:06 jqj
* added CH_NameToString
*
* Revision 2.0 85/11/21 07:22:34 jqj
* 4.3BSD standard release
*
* Revision 1.1 85/03/26 06:27:02 jqj
* Initial revision
*
* Revision 1.1 85/03/26 06:27:02 jqj
* Initial revision
*
*/
#include <xnscourier/Clearinghouse2.h>
static char *copy();
/*
* Given an ObjectName, produce a string in standard format.
* N.B. should escape ":" in the components!
*/
char *
CH_NameToString(chs_name)
Clearinghouse2_ObjectName chs_name;
{
static char buf[84];
extern char *sprintf();
return sprintf(buf,"%.40s:%.20s:%.20s",
chs_name.object,
chs_name.domain,
chs_name.organization);
}
/*
* Given a string in standard format, return an ObjectName.
* If the string is incomplete, e.g. "jqj" or "::cornell-univ", fill
* in default values from defaults.
* N.B. should handle escaped ":" in the compenents.
*/
Clearinghouse2_ObjectName
CH_StringToName(str,defaults)
char *str;
Clearinghouse2_ObjectName *defaults;
{
register char *s1;
extern char *index();
register Clearinghouse2_ObjectName result;
s1 = result.object = (str ? copy(str) : "");
if (s1 = index(s1,':')) {
*s1 = '\0';
result.domain = ++s1;
if (s1 = index(s1,':')) {
*s1 = '\0';
result.organization = ++s1;
}
else
result.organization = "";
}
else
result.organization = result.domain = "";
/* now fill in defaults if any */
if (defaults == (Clearinghouse2_ObjectName*) NULL)
return(result);
if (*result.object == '\0' && defaults->object != NULL)
result.object = copy(defaults->object);
if (*result.domain == '\0' && defaults->domain != NULL)
result.domain = copy(defaults->domain);
if (*result.organization == '\0' && defaults->organization != NULL)
result.organization = copy(defaults->organization);
return(result);
}
static char *
copy(s)
char *s;
{
char *p;
extern char *malloc();
if ((p = malloc(strlen(s) + 1)) == NULL) {
exit(1);
}
(void) strcpy(p, s);
return (p);
}