- char *
-
simple_memcpy (char *dst, const char *src, size_t n)
-
{
-
char *ret = dst;
-
while (n--)
-
*dst++ = *src++;
-
return ret;
-
}
-
-
char *
-
simple_memchr (const char *s, int c, size_t n)
-
{
-
while (n--)
-
if (*s++ == (char) c)
-
return (char *) s - 1;
-
return NULL;
-
}
-
-
int
-
simple_memcmp (const char *s1, const char *s2, size_t n)
-
{
-
int ret = 0;
-
-
while (n--
-
&& (ret = *(unsigned char *) s1++ - *(unsigned char *) s2++) == 0);
-
return ret;
-
}
-
-
void *
-
simple_memmem (const void *haystack, size_t haystack_len, const void *needle,
-
size_t needle_len)
-
{
-
const char *begin;
-
const char *const last_possible
-
= (const char *) haystack + haystack_len - needle_len;
-
-
if (needle_len == 0)
-
return (void *) haystack;
-
-
if (haystack_len < needle_len)
-
return NULL;
-
-
for (begin = (const char *) haystack; begin <= last_possible; ++begin)
-
if (begin[0] == ((const char *) needle)[0] &&
-
!memcmp ((const void *) &begin[1],
-
(const void *) ((const char *) needle + 1),
-
needle_len - 1))
-
return (void *) begin;
-
-
return NULL;
-
}
-
-
char *
-
simple_memmove (char *dst, const char *src, size_t n)
-
{
-
char *ret = dst;
-
if (src < dst)
-
{
-
dst += n;
-
src += n;
-
while (n--)
-
*--dst = *--src;
-
}
-
else
-
while (n--)
-
*dst++ = *src++;
-
return ret;
-
}
-
-
-
char *
-
simple_memset (char *s, int c, size_t n)
-
{
-
char *r = s, *end = s + n;
-
while (r < end)
-
*r++ = c;
-
return s;
-
}
-
-
char *
-
simple_stpcpy (char *dst, const char *src)
-
{
-
while ((*dst++ = *src++) != '\0');
-
return dst - 1;
-
}
-
-
char *
-
simple_stpncpy (char *dst, const char *src, size_t n)
-
{
-
while (n--)
-
if ((*dst++ = *src++) == '\0')
-
{
-
size_t i;
-
-
for (i = 0; i < n; ++i)
-
dst[i] = '\0';
-
return dst - 1;
-
}
-
return dst;
-
}
-
-
char *
-
simple_strcat (char *dst, const char *src)
-
{
-
char *ret = dst;
-
while (*dst++ != '\0');
-
--dst;
-
while ((*dst++ = *src++) != '\0');
-
return ret;
-
}
-
-
char *
-
simple_strchr (const char *s, int c)
-
{
-
for (; *s != (char) c; ++s)
-
if (*s == '\0')
-
return NULL;
-
return (char *) s;
-
}
-
-
int
-
simple_strcmp (const char *s1, const char *s2)
-
{
-
int ret;
-
-
while ((ret = *(unsigned char *) s1 - *(unsigned char *) s2++) == 0
-
&& *s1++);
-
return ret;
-
}
-
-
char *
-
simple_strcpy (char *dst, const char *src)
-
{
-
char *ret = dst;
-
while ((*dst++ = *src++) != '\0');
-
return ret;
-
}
-
-
size_t
-
simple_strspn (const char *s, const char *acc)
-
{
-
const char *r, *str = s;
-
char c;
-
-
while ((c = *s++) != '\0')
-
{
-
for (r = acc; *r != '\0'; ++r)
-
if (*r == c)
-
break;
-
if (*r == '\0')
-
return s - str - 1;
-
}
-
return s - str - 1;
-
}
-
-
size_t
-
simple_strcspn (const char *s, const char *rej)
-
{
-
const char *r, *str = s;
-
char c;
-
-
while ((c = *s++) != '\0')
-
for (r = rej; *r != '\0'; ++r)
-
if (*r == c)
-
return s - str - 1;
-
return s - str - 1;
-
}
-
-
size_t
-
simple_strlen (const char *s)
-
{
-
const char *p;
-
-
for (p = s; *p; ++p);
-
return p - s;
-
}
-
-
int
-
simple_strncmp (const char *s1, const char *s2, size_t n)
-
{
-
int ret = 0;
-
-
while (n-- && (ret = *(unsigned char *) s1 - * (unsigned char *) s2++) == 0
-
&& *s1++);
-
return ret;
-
}
-
-
char *
-
simple_strncpy (char *dst, const char *src, size_t n)
-
{
-
char *ret = dst;
-
while (n--)
-
if ((*dst++ = *src++) == '\0')
-
{
-
while (n--)
-
*dst++ = '\0';
-
return ret;
-
}
-
return ret;
-
}
-
-
char *
-
simple_strpbrk (const char *s, const char *rej)
-
{
-
const char *r;
-
char c;
-
-
while ((c = *s++) != '\0')
-
for (r = rej; *r != '\0'; ++r)
-
if (*r == c)
-
return (char *) s - 1;
-
return NULL;
-
}
-
-
char *
-
simple_strrchr (const char *s, int c)
-
{
-
const char *ret = NULL;
-
-
for (; *s != '\0'; ++s)
-
if (*s == (char) c)
-
ret = s;
-
-
return (char *) (c == '\0' ? s : ret);
- }