19 while (len < n && str[len])
27 while (s1[i] && s2[i] && s1[i] == s2[i])
49 for (
size_t i = 0; i < n; i++)
51 unsigned char a_byte =
tolower(a[i]);
52 unsigned char b_byte =
tolower(b[i]);
53 if (!a_byte && !b_byte)
64void *
memcpy(
void *__restrict _dst,
const void *__restrict _src,
size_t n)
68#define UNALIGNED(X, Y) (((long) X & (sizeof(long) - 1)) | ((long) Y & (sizeof(long) - 1)))
69#define BIGBLOCKSIZE (sizeof(long) << 2)
70#define LITTLEBLOCKSIZE (sizeof(long))
71#define TOO_SMALL(LEN) ((LEN) < BIGBLOCKSIZE)
73 auto dst = (
char *) _dst;
74 const char *src = (
const char *) _src;
80 long *aligned_dst = (
long *) dst;
81 const long *aligned_src = (
long *) src;
86 *aligned_dst++ = *aligned_src++;
87 *aligned_dst++ = *aligned_src++;
88 *aligned_dst++ = *aligned_src++;
89 *aligned_dst++ = *aligned_src++;
96 *aligned_dst++ = *aligned_src++;
101 dst = (
char *) aligned_dst;
102 src = (
char *) aligned_src;
111void *
memmove(
void *dest,
const void *source,
size_t length)
114 char *dst =
static_cast<char *
>(dest);
115 const char *src =
static_cast<const char *
>(source);
117 if (src < dst && dst < src + length)
136 u8 *d =
static_cast<u8 *
>(s);
137 for (
size_t i = 0; i < n; i++)
142int memcmp(
const void *s1,
const void *s2,
size_t n)
144 const u8 *p1 =
static_cast<const u8 *
>(s1);
145 const u8 *p2 =
static_cast<const u8 *
>(s2);
147 for (
size_t i = 0; i < n; i++)
150 return p1[i] - p2[i];
157 typedef u64 largeint_t;
158 largeint_t *lsrc = (largeint_t *) s;
160 while (n >=
sizeof(largeint_t))
163 n -=
sizeof(largeint_t);
166 char *csrc = (
char *) lsrc;
175void *
memchr(
const void *m,
int c,
size_t n)
177 const u8 *s =
static_cast<const u8 *
>(m);
178 for (
size_t i = 0; i < n; i++)
181 return (
void *) &s[i];
186char *
strcpy(
char *__restrict dest,
const char *__restrict src)
194char *
strcat(
char *__restrict dest,
const char *__restrict src)
204char *
strncpy(
char *__restrict dest,
const char *__restrict src,
size_t n)
207 while (n > 0 && *src)
222char *
strdup(
const char *src)
224 char *dst = (
char *) malloc(
strlen(src) + 1);
229char *
strndup(
const char *src,
size_t len)
231 char *dst = (
char *) malloc(len + 1);
251 const char *last =
NULL;
257 return (
char *) last;
260size_t strspn(
const char *s,
const char *accept)
265 if (!
strchr(accept, s[i]))
272char *
strpbrk(
const char *s,
const char *accept)
283char *
strtok(
char *str,
const char *delim)
290 str +=
strspn(str, delim);
305char *
strtok_r(
char *str,
const char *delim,
char **saveptr)
313 str +=
strspn(str, delim);
316 return *saveptr =
NULL;
char * strcat(char *__restrict dest, const char *__restrict src)
void * memset(void *s, int c, size_t n)
char * strchr(const char *s, int c)
void * memchr(const void *m, int c, size_t n)
char * strtok(char *str, const char *delim)
size_t strspn(const char *s, const char *accept)
char * strcpy(char *__restrict dest, const char *__restrict src)
s32 strncasecmp(const char *a, const char *b, size_t n)
char * strrchr(const char *s, int c)
MOSAPI char * strdup(const char *src)
char * strncpy(char *__restrict dest, const char *__restrict src, size_t n)
int memcmp(const void *s1, const void *s2, size_t n)
void * memcpy(void *__restrict _dst, const void *__restrict _src, size_t n)
size_t strlen(const char *str)
void * memmove(void *dest, const void *source, size_t length)
s32 strncmp(const char *str1, const char *str2, size_t n)
char * strtok_r(char *str, const char *delim, char **saveptr)
s32 strcmp(const char *s1, const char *s2)
size_t strnlen(const char *str, size_t n)
char * strpbrk(const char *s, const char *accept)
MOSAPI char * strndup(const char *src, size_t n)
MOSAPI unsigned char tolower(unsigned char c)
#define memzero(ptr, size)