Files
Arquivotheca.SunOS-4.1.4/usr.lib/libns/rtoken.c
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

163 lines
3.4 KiB
C

/* @(#)rtoken.c 1.1 94/10/31 SMI */
/* Copyright (c) 1984 AT&T */
/* All Rights Reserved */
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */
/* The copyright notice above does not evidence any */
/* actual or intended publication of such source code. */
/* #ident "@(#)libns:rtoken.c 1.3" */
#include <stdio.h>
#include <tiuser.h>
#include <rfs/nsaddr.h>
#include "stdns.h"
#include "nsdb.h"
#include <rfs/nserve.h>
static char sepstr[2] = { SEPARATOR, '\0' };
/*
* For left to right syntax of domain names,
* rtoken is identical to strtok.
* For right to left syntax, it does the equivalent
* of strtok, but starts at the right side of the string
* and goes to the left.
*/
#ifdef RIGHT_TO_LEFT
char *
rtoken(name)
char *name;
{
static char *pptr;
static char buffer[BUFSIZ];
if (name) { /* initialize */
strncpy(buffer,name,BUFSIZ);
pptr = &buffer[strlen(buffer)];
}
else if (pptr == NULL) {
fprintf(stderr,"rtoken: no current name\n");
return(NULL);
}
*pptr = '\0';
if (buffer == pptr)
return(NULL);
while (buffer < pptr && *pptr != SEPARATOR)
pptr--;
if (*pptr == SEPARATOR)
return(pptr+1);
return(pptr);
}
#else
char *
rtoken(name)
char *name;
{
char *strtok();
return(strtok(name,sepstr));
}
#endif
/**************************************************************
*
* dompart returns the domain part of a domain name.
*
* e.g., if RIGHT_TO_LEFT
* dompart("a.b.c.d") would return "b.c.d"
* dompart("a") would return "" (ptr to null string)
* if LEFT_TO_RIGHT
* dompart("a.b.c.d") would return "a.b.c"
* dompart("a") would return "" (ptr to null string)
*
* dompart returns a pointer to a static buffer that contains
* the result. An error will cause dompart to return NULL.
*
*************************************************************/
char *
dompart(name)
register char *name;
{
#ifdef RIGHT_TO_LEFT
static char sname[MAXDNAME+1];
if (name == NULL)
return(NULL);
while (*name != SEPARATOR && *name != '\0')
name++;
if (*name == SEPARATOR)
name++; /* skip over separator */
strcpy(sname,name);
return(sname);
#else
static char sname[MAXDNAME+1];
register char *pt=sname;
char *save=sname;;
if (name == NULL)
return(NULL);
while(*pt++ = *name++)
if (*name == SEPARATOR)
save = pt;
*save = NULL;
return(sname);
#endif
}
/**************************************************************
*
* namepart returns the name part of a domain name.
*
* e.g., if RIGHT_TO_LEFT
* namepart("a.b.c.d") would return "a"
* namepart("a") would return "a"
* namepart("") would return "" (ptr to null string)
* if LEFT_TO_RIGHT
* namepart("a.b.c.d") would return "d"
* namepart("a") would return "a"
* namepart("") would return "" (ptr to null string)
*
* namepart returns a pointer into a static buffer
* so new calls to namepart overwrite previous results.
* An error will cause namepart to return NULL.
*
*************************************************************/
char *
namepart(name)
register char *name;
{
#ifdef RIGHT_TO_LEFT
static char sname[MAXDNAME+1];
register char *p;
if (name == NULL)
return(NULL);
p=sname;
while (*name !=SEPARATOR && *name != '\0' && p < &sname[NAMSIZ+1])
*p++ = *name++;
*p = '\0';
return(sname);
#else
static char sname[MAXDNAME+1];
register char *pt=name;
register char *npt=sname;
while (*name++)
if (*name == SEPARATOR)
pt = name+1;
while (*npt++ = *pt++)
;
return(sname);
#endif
}