1 /* string.c -- standard C string-manipulation functions.
3 Copyright (C) 2008 Segher Boessenkool <segher@kernel.crashing.org>
4 Copyright (C) 2009 Haxx Enterprises <bushing@gmail.com>
6 Portions taken from the Public Domain C Library (PDCLib).
7 https://negix.net/trac/pdclib
9 # This code is licensed to you under the terms of the GNU GPL, version 2;
10 # see file COPYING or http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
15 size_t strlen(const char *s)
19 for (len = 0; s[len]; len++)
25 size_t strnlen(const char *s, size_t count)
29 for (len = 0; s[len] && len < count; len++)
35 void *memset(void *b, int c, size_t len)
39 for (i = 0; i < len; i++)
40 ((unsigned char *)b)[i] = c;
45 void *memcpy(void *dst, const void *src, size_t len)
49 for (i = 0; i < len; i++)
50 ((unsigned char *)dst)[i] = ((unsigned char *)src)[i];
55 int memcmp(const void *s1, const void *s2, size_t len)
58 const unsigned char * p1 = (const unsigned char *) s1;
59 const unsigned char * p2 = (const unsigned char *) s2;
61 for (i = 0; i < len; i++)
62 if (p1[i] != p2[i]) return p1[i] - p2[i];
67 int strcmp(const char *s1, const char *s2)
71 for (i = 0; s1[i] && s1[i] == s2[i]; i++)
77 int strncmp(const char *s1, const char *s2, size_t n)
81 for (i = 0; i < n && s1[i] && s1[i] == s2[i]; i++)
87 size_t strlcpy(char *dest, const char *src, size_t maxlen)
91 len = needed = strnlen(src, maxlen-1) + 1;
95 memcpy(dest, src, len);
101 size_t strlcat(char *dest, const char *src, size_t maxlen)
105 used = strnlen(dest, maxlen-1);
106 return used + strlcpy(dest + used, src, maxlen - used);
109 char * strchr(const char *s, int c)
113 for (i = 0; s[i]; i++)
114 if (s[i] == (char)c) return (char *)s + i;
119 size_t strspn(const char *s1, const char *s2)
141 size_t strcspn(const char *s1, const char *s2)