#ifndef SYSROOT_STRING_H_
#define SYSROOT_STRING_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <features.h>

#include <bits/null.h>

#define __NEED_size_t

#include <bits/alltypes.h>

void* memcpy(void* __restrict, const void* __restrict, size_t);
void* memmove(void*, const void*, size_t);
void* memset(void*, int, size_t);
int memcmp(const void*, const void*, size_t);
void* memchr(const void*, int, size_t);

char* strcpy(char* __restrict, const char* __restrict);
char* strncpy(char* __restrict, const char* __restrict, size_t);

char* strcat(char* __restrict, const char* __restrict);
char* strncat(char* __restrict, const char* __restrict, size_t);

int strcmp(const char*, const char*);
int strncmp(const char*, const char*, size_t);

int strcoll(const char*, const char*);
size_t strxfrm(char* __restrict, const char* __restrict, size_t);

char* strchr(const char*, int);
char* strrchr(const char*, int);

size_t strcspn(const char*, const char*);
size_t strspn(const char*, const char*);
char* strpbrk(const char*, const char*);
char* strstr(const char*, const char*);
char* strtok(char* __restrict, const char* __restrict);

size_t strlen(const char*);

char* strerror(int);

#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
#include <strings.h>
#endif

#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
    defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
char* strtok_r(char* __restrict, const char* __restrict, char** __restrict);
int strerror_r(int, char*, size_t);
char* stpcpy(char* __restrict, const char* __restrict);
char* stpncpy(char* __restrict, const char* __restrict, size_t);
size_t strnlen(const char*, size_t);
char* strdup(const char*);
char* strndup(const char*, size_t);
char* strsignal(int);
#endif

#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
void* memccpy(void* __restrict, const void* __restrict, int, size_t);
#endif

#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
char* strsep(char**, const char*);
size_t strlcat(char*, const char*, size_t);
size_t strlcpy(char*, const char*, size_t);
#endif

#ifdef _GNU_SOURCE
#define strdupa(x) strcpy(alloca(strlen(x) + 1), x)
int strverscmp(const char*, const char*);
char* strchrnul(const char*, int);
char* strcasestr(const char*, const char*);
void* memmem(const void*, size_t, const void*, size_t);
void* memrchr(const void*, int, size_t);
void* mempcpy(void*, const void*, size_t);
#ifndef __cplusplus
char* basename(char*);
#endif
#endif

#ifdef __cplusplus
}
#endif

#endif  // SYSROOT_STRING_H_
