#ifndef _LIBC_STRING_H
#define _LIBC_STRING_H
#define _DEFAULT_SOURCE
#include_next <string.h>
#define __memcpy(to, from, size) memcpy(to, from, size)
#define __strchrnul(string, character) strchrnul(string, character)
#define __strnlen strnlen
#define __strdup strdup
#define __strndup strndup
#define __stpcpy stpcpy
#define __strtok_r strtok_r
#define __strcasecmp strcasecmp
static inline char *
__strerror_r(int error, char *buffer, size_t bufferSize)
{
if (strerror_r(error, buffer, bufferSize) != 0)
strlcpy(buffer, "Unknown Error", bufferSize);
return buffer;
}
static inline void *
__mempcpy(void *to, const void *from, size_t size)
{
memcpy(to, from, size);
return (unsigned char *)to + size;
}
#undef strdupa
#define strdupa(s) \
(__extension__ \
({ \
__const char *__old = (s); \
size_t __len = strlen (__old) + 1; \
char *__new = (char *) __builtin_alloca (__len); \
(char *) memcpy (__new, __old, __len); \
}))
#undef strndupa
#define strndupa(s, n) \
(__extension__ \
({ \
__const char *__old = (s); \
size_t __len = __strnlen (__old, (n)); \
char *__new = (char *) __builtin_alloca (__len + 1); \
__new[__len] = '\0'; \
(char *) memcpy (__new, __old, __len); \
}))
#endif