1#ifndef __SIMPLE_LIBC_STRING_H__
2#define __SIMPLE_LIBC_STRING_H__
6#if VSF_LINUX_CFG_RELATIVE_PATH == ENABLED && VSF_LINUX_USE_SIMPLE_LIBC == ENABLED
15#if __IS_COMPILER_LLVM__
16# pragma clang diagnostic push
17# pragma clang diagnostic ignored "-Wbuiltin-requires-header"
18# pragma clang diagnostic ignored "-Wincompatible-library-redeclaration"
19# pragma clang diagnostic ignored "-Winconsistent-dllimport"
26#if VSF_LINUX_LIBC_CFG_WRAPPER == ENABLED
27#if !(VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR == ENABLED) \
28 || !(VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR_TRACE_CALLER == ENABLED)
30#define strdup VSF_LINUX_LIBC_WRAPPER(strdup)
32#define strndup VSF_LINUX_LIBC_WRAPPER(strndup)
35#if VSF_LINUX_APPLET_USE_LIBC_STRING == ENABLED
82# ifndef __VSF_APPLET__
87#if defined(__VSF_APPLET__) && (defined(__VSF_APPLET_LIB__) || defined(__VSF_APPLET_LINUX_LIBC_STRING_LIB__))\
88 && VSF_APPLET_CFG_ABI_PATCH != ENABLED && VSF_LINUX_APPLET_USE_LIBC_STRING == ENABLED
90#ifndef VSF_LINUX_APPLET_LIBC_STRING_VPLT
91# if VSF_LINUX_USE_APPLET == ENABLED
92# define VSF_LINUX_APPLET_LIBC_STRING_VPLT \
93 ((vsf_linux_libc_string_vplt_t *)(VSF_LINUX_APPLET_VPLT->libc_string_vplt))
95# define VSF_LINUX_APPLET_LIBC_STRING_VPLT \
96 ((vsf_linux_libc_string_vplt_t *)vsf_vplt((void *)0))
100#define VSF_LINUX_APPLET_LIBC_STRING_ENTRY(__NAME) \
101 VSF_APPLET_VPLT_ENTRY_FUNC_ENTRY(VSF_LINUX_APPLET_LIBC_STRING_VPLT, __NAME)
102#define VSF_LINUX_APPLET_LIBC_STRING_IMP(...) \
103 VSF_APPLET_VPLT_ENTRY_FUNC_IMP(VSF_LINUX_APPLET_LIBC_STRING_VPLT, __VA_ARGS__)
105#if VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR == ENABLED
109 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
____strdup_ex)(process, str, file, func, line);
112VSF_LINUX_APPLET_LIBC_STRING_IMP(
ffs,
int,
int i) {
114 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
ffs)(i);
116VSF_LINUX_APPLET_LIBC_STRING_IMP(
memset,
void *,
void *s,
int ch,
size_t n) {
118 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
memset)(s, ch, n);
120VSF_LINUX_APPLET_LIBC_STRING_IMP(
strlen,
size_t,
const char *str) {
122 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strlen)(str);
124VSF_LINUX_APPLET_LIBC_STRING_IMP(
strnlen,
size_t,
const char *str,
size_t maxlen) {
126 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strnlen)(str, maxlen);
128VSF_LINUX_APPLET_LIBC_STRING_IMP(
strcmp,
int,
const char *str1,
const char *str2) {
130 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strcmp)(str1, str2);
132VSF_LINUX_APPLET_LIBC_STRING_IMP(
strncmp,
int,
const char *str1,
const char *str2,
size_t n) {
134 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strncmp)(str1, str2, n);
136VSF_LINUX_APPLET_LIBC_STRING_IMP(
strdup,
char *,
const char *str) {
138 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strdup)(str);
140VSF_LINUX_APPLET_LIBC_STRING_IMP(
strcpy,
char *,
char *dest,
const char *src) {
142 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strcpy)(dest, src);
144VSF_LINUX_APPLET_LIBC_STRING_IMP(
strncpy,
char *,
char *dest,
const char *src,
size_t n) {
146 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strncpy)(dest, src, n);
148VSF_LINUX_APPLET_LIBC_STRING_IMP(
stpcpy,
char *,
char *dest,
const char *src) {
150 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
stpcpy)(dest, src);
152VSF_LINUX_APPLET_LIBC_STRING_IMP(
stpncpy,
char *,
char *dest,
const char *src,
size_t n) {
154 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
stpncpy)(dest, src, n);
156VSF_LINUX_APPLET_LIBC_STRING_IMP(
strcat,
char *,
char *dest,
const char *src) {
158 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strcat)(dest, src);
160VSF_LINUX_APPLET_LIBC_STRING_IMP(
strncat,
char *,
char *dest,
const char *str,
size_t n) {
162 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strncat)(dest, str, n);
164VSF_LINUX_APPLET_LIBC_STRING_IMP(
strcoll,
int,
const char *str1,
const char *str2) {
166 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strcoll)(str1, str2);
168VSF_LINUX_APPLET_LIBC_STRING_IMP(
strtok,
char *,
char *str,
const char *delim) {
170 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strtok)(str, delim);
172VSF_LINUX_APPLET_LIBC_STRING_IMP(
strtok_r,
char *,
char *str,
const char *delim,
char **saveptr) {
174 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strtok_r)(str, delim, saveptr);
176VSF_LINUX_APPLET_LIBC_STRING_IMP(
strxfrm,
size_t,
char *dest,
const char *src,
size_t n) {
178 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strxfrm)(dest, src, n);
180VSF_LINUX_APPLET_LIBC_STRING_IMP(
strspn,
size_t,
const char *str1,
const char *str2) {
182 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strspn)(str1, str2);
184VSF_LINUX_APPLET_LIBC_STRING_IMP(
strsep,
char *,
char **strp,
const char *delim) {
186 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strsep)(strp, delim);
188VSF_LINUX_APPLET_LIBC_STRING_IMP(
strcspn,
size_t,
const char *str1,
const char *str2) {
190 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strcspn)(str1, str2);
192VSF_LINUX_APPLET_LIBC_STRING_IMP(
strpbrk,
char *,
const char *str1,
const char *str2) {
194 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strpbrk)(str1, str2);
196VSF_LINUX_APPLET_LIBC_STRING_IMP(
strerror,
char *,
int errnum) {
198 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strerror)(errnum);
200VSF_LINUX_APPLET_LIBC_STRING_IMP(
strcasecmp,
int,
const char *str1,
const char *str2) {
202 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strcasecmp)(str1, str2);
204VSF_LINUX_APPLET_LIBC_STRING_IMP(
strncasecmp,
int,
const char *str1,
const char *str2,
size_t n) {
206 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strncasecmp)(str1, str2, n);
208VSF_LINUX_APPLET_LIBC_STRING_IMP(
memcpy,
void *,
void *dest,
const void *src,
size_t n) {
210 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
memcpy)(dest, src, n);
212VSF_LINUX_APPLET_LIBC_STRING_IMP(
mempcpy,
void *,
void *dest,
const void *src,
size_t n) {
214 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
mempcpy)(dest, src, n);
216VSF_LINUX_APPLET_LIBC_STRING_IMP(
strlcpy,
size_t,
char *dest,
const char *src,
size_t n) {
218 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strlcpy)(dest, src, n);
220VSF_LINUX_APPLET_LIBC_STRING_IMP(
strstr,
char *,
const char *str1,
const char *str2) {
222 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strstr)(str1, str2);
224VSF_LINUX_APPLET_LIBC_STRING_IMP(
strcasestr,
char *,
const char *str1,
const char *str2) {
226 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strcasestr)(str1, str2);
228VSF_LINUX_APPLET_LIBC_STRING_IMP(
strchr,
char *,
const char *str,
int c) {
230 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strchr)(str, c);
232VSF_LINUX_APPLET_LIBC_STRING_IMP(
strrchr,
char *,
const char *str,
int c) {
234 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strrchr)(str, c);
236VSF_LINUX_APPLET_LIBC_STRING_IMP(
strchrnul,
char *,
const char *str,
int c) {
238 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strchrnul)(str, c);
240VSF_LINUX_APPLET_LIBC_STRING_IMP(
memmove,
void *,
void *dest,
const void *src,
size_t n) {
242 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
memmove)(dest, src, n);
244VSF_LINUX_APPLET_LIBC_STRING_IMP(
memcmp,
int,
const void *str1,
const void *str2,
size_t n) {
246 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
memcmp)(str1, str2, n);
248VSF_LINUX_APPLET_LIBC_STRING_IMP(
memchr,
void *,
const void *buf,
int ch,
size_t count) {
250 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
memchr)(buf, ch, count);
252VSF_LINUX_APPLET_LIBC_STRING_IMP(
memrchr,
void *,
const void *buf,
int ch,
size_t count) {
254 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
memrchr)(buf, ch, count);
256VSF_LINUX_APPLET_LIBC_STRING_IMP(
strverscmp,
int,
const char *str1,
const char *str2) {
258 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strverscmp)(str1, str2);
260VSF_LINUX_APPLET_LIBC_STRING_IMP(
strndup,
char *,
const char *str,
size_t n) {
262 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strndup)(str, n);
264VSF_LINUX_APPLET_LIBC_STRING_IMP(
strsignal,
char *,
int sig) {
266 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strsignal)(
sig);
268VSF_LINUX_APPLET_LIBC_STRING_IMP(
sigdescr_np,
const char *,
int sig) {
282size_t strnlen(
const char *str,
size_t maxlen);
283int strcmp(
const char *str1,
const char *str2);
284int strncmp(
const char *str1,
const char *str2,
size_t n);
285int strverscmp(
const char *str1,
const char *str2);
287#if VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR == ENABLED
292#if VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR == ENABLED \
293 && VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR_TRACE_CALLER == ENABLED
294# define strdup(__str) ____strdup_ex(NULL, (char *)(__str), __FILE__, __FUNCTION__, __LINE__)
296char *
strdup(
const char *str);
298char *
strndup(
const char *str,
size_t n);
299char *
strcpy(
char *dest,
const char *src);
300char *
strncpy(
char *dest,
const char *src,
size_t n);
302char *
stpcpy(
char *dest,
const char *src);
303char *
stpncpy(
char *dest,
const char *src,
size_t n);
304char *
strcat(
char *dest,
const char *src);
305char *
strncat(
char *dest,
const char *str,
size_t n);
306int strcoll(
const char *str1,
const char *str2);
307char *
strtok(
char *str,
const char *delim);
308char *
strtok_r(
char *str,
const char *delim,
char **saveptr);
309size_t strxfrm(
char *dest,
const char *src,
size_t n);
310size_t strspn(
const char *str1,
const char *str2);
311char *
strsep(
char **strp,
const char *delim);
312size_t strcspn(
const char *str1,
const char *str2);
313char *
strpbrk(
const char *str1,
const char *str2);
316int strerror_r(
int errnum,
char *buf,
size_t buflen);
319# ifndef _CONST_RETURN
321# define _CONST_RETURN const
323# define _CONST_RETURN
327# ifndef __VSF_APPLET__
328int stricmp(
const char *str1,
const char *str2);
329int strnicmp(
const char *str1,
const char *str2,
size_t n);
331# define strcasecmp stricmp
334# define strncasecmp strnicmp
338# if defined(__CPU_X64__)
339void *
memcpy(
void *dest,
const void *src,
unsigned long long n);
341void *
memcpy(
void *dest,
const void *src,
unsigned int n);
344# define _CONST_RETURN
347void *
memcpy(
void *dest,
const void *src,
size_t n);
348size_t strlcpy(
char *dest,
const char *src,
size_t n);
350void *
mempcpy(
void *dest,
const void *src,
size_t n);
360void *
memmove(
void *dest,
const void *src,
size_t n);
361int memcmp(
const void *str1,
const void *str2,
size_t n);
373#if __IS_COMPILER_LLVM__
374# pragma clang diagnostic pop
Definition vsf_linux.h:278
int ssize_t
Definition types.h:68
size_t strlen(const char *str)
size_t strspn(const char *str1, const char *str2)
char * strpbrk(const char *str1, const char *str2)
_CONST_RETURN char * strrchr(const char *str, int c)
char * strcat(char *dest, const char *src)
void * memset(void *s, int ch, size_t n)
int ffs(int i)
Definition vsf_linux_glibc_string.c:159
size_t strcspn(const char *str1, const char *str2)
const char * sigdescr_np(int sig)
Definition vsf_linux_glibc_string.c:174
int strncasecmp(const char *str1, const char *str2, size_t n)
void * memmove(void *dest, const void *src, size_t n)
char * stpncpy(char *dest, const char *src, size_t n)
Definition vsf_linux_glibc_string.c:137
char * strtok_r(char *str, const char *delim, char **saveptr)
_CONST_RETURN char * strchr(const char *str, int c)
char * strerror(int errnum)
Definition vsf_linux_glibc_string.c:148
size_t strlcpy(char *dest, const char *src, size_t n)
Definition vsf_xboot.c:39
char * strsignal(int sig)
Definition vsf_linux_glibc_string.c:170
int strerror_r(int errnum, char *buf, size_t buflen)
Definition vsf_linux_glibc_string.c:153
int strcmp(const char *str1, const char *str2)
_CONST_RETURN void * memrchr(const void *buf, int ch, size_t count)
Definition vsf_linux_glibc_string.c:105
char * strtok(char *str, const char *delim)
char * stpcpy(char *dest, const char *src)
Definition vsf_linux_glibc_string.c:131
int strcoll(const char *str1, const char *str2)
char * strncat(char *dest, const char *str, size_t n)
#define _CONST_RETURN
Definition string.h:344
int strcasecmp(const char *str1, const char *str2)
char * strncpy(char *dest, const char *src, size_t n)
char * ____strdup_ex(vsf_linux_process_t *process, const char *str, const char *file, const char *func, int line)
Definition vsf_linux_glibc_string.c:50
ssize_t strscpy(char *dest, const char *src, size_t n)
Definition vsf_linux_glibc_string.c:70
void * mempcpy(void *dest, const void *src, size_t n)
Definition vsf_linux_glibc_string.c:65
_CONST_RETURN void * memchr(const void *buf, int ch, size_t count)
_CONST_RETURN char * strstr(const char *str1, const char *str2)
int strncmp(const char *str1, const char *str2, size_t n)
void * memcpy(void *dest, const void *src, size_t n)
int strverscmp(const char *str1, const char *str2)
Definition vsf_linux_glibc_string.c:165
char * strcpy(char *dest, const char *src)
char * strcasestr(const char *haystack, const char *needle)
int memcmp(const void *str1, const void *str2, size_t n)
#define strndup
Definition string.h:32
const char * sigabbrev_np(int sig)
Definition vsf_linux_glibc_string.c:178
size_t strnlen(const char *str, size_t maxlen)
size_t strxfrm(char *dest, const char *src, size_t n)
#define strdup(__str)
Definition string.h:294
_CONST_RETURN char * strchrnul(const char *str, int c)
Definition vsf_linux_glibc_string.c:123
char * strsep(char **strp, const char *delim)
Definition vsf_xboot.c:44
__VSF_VPLT_DECORATOR__ vsf_linux_libc_string_vplt_t vsf_linux_libc_string_vplt
Definition vsf_linux_glibc_string.c:193
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(ffs)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(memrchr)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strncat)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strdup)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strchr)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(memcpy)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strsep)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strrchr)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strlcpy)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(____strdup_ex)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strlen)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strxfrm)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strnlen)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strcoll)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strpbrk)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strcasecmp)
vsf_vplt_info_t info
Definition string.h:37
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strcspn)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(stpncpy)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strspn)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strncpy)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strncmp)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(sigabbrev_np)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strstr)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strtok_r)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strcat)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strncasecmp)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strerror)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strtok)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(memcmp)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strndup)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(stpcpy)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strverscmp)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strsignal)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(memchr)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strcmp)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(memmove)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strchrnul)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(sigdescr_np)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(mempcpy)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strcpy)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(memset)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strcasestr)
#define __VSF_VPLT_DECORATOR__
Definition vsf_cfg.h:93
#define VSF_APPLET_VPLT_ENTRY_FUNC_TRACE()
Definition vsf_cfg.h:165
int sig
Definition vsf_thread.h:421