Trailing-Edge
-
PDP-10 Archives
-
SRI_NIC_PERM_FS_1_19910112
-
c/old/lib/string.c
There are 9 other files named string.c in the archive. Click here to see a list.
/* ---------------------------------------------------------------- */
/* string - string manipulation routines for KCC runtimes */
/* references: man 3 string */
/* David Eppstein / Stanford University / 3-July-1984 */
/* ---------------------------------------------------------------- */
entry strcat, strncat, strcmp, strncmp, strcpy, strncpy, strlen, index, rindex;
#define NULL 0
/* -------------------------------------------------------------- */
/* append strings, return ptr to null-terminated result */
/* -------------------------------------------------------------- */
char *strcat(s1, s2)
char *s1, *s2;
{
char *s;
if (*s2 == '\0') return s1; /* make sure we have something to do */
s = s1; /* copy start pointer */
if (*s1 != '\0') while (*++s1 != '\0') ; /* skip to first null */
*s1 = *s2; /* copy first char */
while ((*++s1 = *++s2) != '\0') ; /* loop copying until null */
return s; /* return pointer to start of string */
}
/* ----------------------------------------------------- */
/* append strings with limit on number to copy */
/* ----------------------------------------------------- */
char *strncat(s1, s2, n)
char *s1, *s2;
{
char *s;
if (*s2 == '\0' || n <= 0) return s1; /* make sure have something to do */
s = s1; /* copy start pointer */
if (*s1 != '\0') while (*++s1 != '\0') ; /* skip to first null */
*s1 = *s2; /* copy first char */
while (--n > 0 && (*++s1 = *++s2) != '\0') ; /* loop copying until null */
if (n == 0) *++s1 = '\0'; /* null-terminate */
return s; /* return pointer to start of string */
}
/* ----------------------------- */
/* compare two strings */
/* ----------------------------- */
strcmp(s1, s2)
char *s1, *s2;
{
while (*s1 == *s2) {
if (*s1++ == '\0') return(0);
s2++;
}
return (*s1 - *s2);
}
/* ------------------------------------------- */
/* same, but look at at most n chars */
/* ------------------------------------------- */
strncmp(s1, s2, n)
char *s1, *s2;
{
while (--n > 0 && *s1 == *s2) {
if (*s1++ == '\0') return(0);
s2++;
}
return (*s1 - *s2);
}
/* -------------------------------------- */
/* copy one string over another */
/* -------------------------------------- */
char *strcpy(s1, s2)
char *s1, *s2;
{
char *s;
s = s1;
if ((*s1 = *s2) != '\0') /* if string isn't completely empty */
while ((*++s1 = *++s2) != '\0') ; /* copy rest of it */
return s; /* return original pointer */
}
/* ---------------------------------------------- */
/* same, but copy exact number of chars */
/* ---------------------------------------------- */
char *strncpy(s1, s2, n)
char *s1, *s2;
{
char *s;
s = s1;
while (n-- > 0) if ((*s1++ = *s2) != '\0') s2++;
return s;
}
/* ------------------------------------------------- */
/* find number of non-null chars in string */
/* ------------------------------------------------- */
strlen(s)
char *s;
{
int n;
if (*s == '\0') return 0;
n = 1;
while (*++s != '\0') n++;
return n;
}
/* ------------------------------------------------- */
/* find first occurrence of char in string */
/* ------------------------------------------------- */
char *index(s, c)
char *s;
{
while (*s != c) {
if (*s == '\0') return NULL; /* no occurrences */
s++; /* maybe more, go look */
}
return s; /* found one, return it */
}
/* ------------------------------------------------ */
/* find last occurrence of char in string */
/* ------------------------------------------------ */
char *rindex(s, c)
char *s;
{
char *r;
r = NULL;
while (*s != '\0') {
if (*s == c) r = s; /* remember last pointer to char */
s++; /* move on to try more chars */
}
return r; /* return the last one we found */
}