/* *----------------------------------------------------------------------------- * * string.c -- * * Implementation of various ISO C functions found in string.h. * *----------------------------------------------------------------------------- */ #include /* *----------------------------------------------------------------------------- * * * * * *----------------------------------------------------------------------------- */ // strstr /* *----------------------------------------------------------------------------- * * * * * *----------------------------------------------------------------------------- */ void * memcpy (void *dest, const void *src, size_t n) { size_t k; for (k = 0; k < n; k++) { *((char *)dest + k) = *((char *)src + k); } return dest; } /* *----------------------------------------------------------------------------- * * * * * *----------------------------------------------------------------------------- */ void * memset (void *s, int c, size_t n) { size_t k; for (k = 0; k < n; k++) { *((char *)s) = (char)c; } return s; } /* *----------------------------------------------------------------------------- * * * * * *----------------------------------------------------------------------------- */ size_t strlen (const char *s) { size_t n = 0; while (*s++) n++; return n; } /* *----------------------------------------------------------------------------- * * * * * *----------------------------------------------------------------------------- */ int strncmp (const char *s1, const char *s2, size_t n) { size_t k; for (k = 0; k < MIN (n, MIN (strlen (s1), strlen (s2))); k++) { if (s1[k] < s2[k]) { return -1; } else if (s1[k] > s2[k]) { return 1; } } return 0; } /* *----------------------------------------------------------------------------- * * * * * *----------------------------------------------------------------------------- */ int strcmp (const char *s1, const char *s2) { return strncmp (s1, s2, MIN (strlen (s1), strlen (s2))); } /* *----------------------------------------------------------------------------- * * * * * *----------------------------------------------------------------------------- */ char * strncpy (char *dest, const char *src, size_t n) { return (char *)memcpy ((void *)dest, (void *)src, n); } /* *----------------------------------------------------------------------------- * * * * * *----------------------------------------------------------------------------- */ char * strcpy (char *dest, const char *src) { return strncpy (dest, src, strlen (src) + 1); } /* *----------------------------------------------------------------------------- * * * * * *----------------------------------------------------------------------------- */ char * strncat (char *dest, const char *src, size_t n) { strncpy (dest + strlen (dest), src, n); return dest; } /* *----------------------------------------------------------------------------- * * * * * *----------------------------------------------------------------------------- */ char * strcat (char *dest, const char *src) { return strncat (dest, src, strlen (src) + 1); }