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
16#if __IS_COMPILER_LLVM__
17# pragma clang diagnostic push
18# pragma clang diagnostic ignored "-Wbuiltin-requires-header"
19# pragma clang diagnostic ignored "-Wincompatible-library-redeclaration"
20# pragma clang diagnostic ignored "-Winconsistent-dllimport"
27#if VSF_LINUX_LIBC_CFG_WRAPPER == ENABLED
28#if !(VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR == ENABLED) \
29 || !(VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR_TRACE_CALLER == ENABLED)
31#define strdup VSF_LINUX_LIBC_WRAPPER(strdup)
33#define strndup VSF_LINUX_LIBC_WRAPPER(strndup)
36#if VSF_LINUX_APPLET_USE_LIBC_STRING == ENABLED
83# ifndef __VSF_APPLET__
88#if defined(__VSF_APPLET__) && (defined(__VSF_APPLET_LIB__) || defined(__VSF_APPLET_LINUX_LIBC_STRING_LIB__))\
89 && VSF_APPLET_CFG_ABI_PATCH != ENABLED && VSF_LINUX_APPLET_USE_LIBC_STRING == ENABLED
91#ifndef VSF_LINUX_APPLET_LIBC_STRING_VPLT
92# if VSF_LINUX_USE_APPLET == ENABLED
93# define VSF_LINUX_APPLET_LIBC_STRING_VPLT \
94 ((vsf_linux_libc_string_vplt_t *)(VSF_LINUX_APPLET_VPLT->libc_string_vplt))
96# define VSF_LINUX_APPLET_LIBC_STRING_VPLT \
97 ((vsf_linux_libc_string_vplt_t *)vsf_vplt((void *)0))
101#define VSF_LINUX_APPLET_LIBC_STRING_ENTRY(__NAME) \
102 VSF_APPLET_VPLT_ENTRY_FUNC_ENTRY(VSF_LINUX_APPLET_LIBC_STRING_VPLT, __NAME)
103#define VSF_LINUX_APPLET_LIBC_STRING_IMP(...) \
104 VSF_APPLET_VPLT_ENTRY_FUNC_IMP(VSF_LINUX_APPLET_LIBC_STRING_VPLT, __VA_ARGS__)
106#if VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR == ENABLED
110 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
____strdup_ex)(process, str, file, func, line);
113VSF_LINUX_APPLET_LIBC_STRING_IMP(
ffs,
int,
int i) {
115 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
ffs)(i);
117VSF_LINUX_APPLET_LIBC_STRING_IMP(
memset,
void *,
void *s,
int ch,
size_t n) {
119 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
memset)(s, ch, n);
121VSF_LINUX_APPLET_LIBC_STRING_IMP(
strlen,
size_t,
const char *str) {
123 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strlen)(str);
125VSF_LINUX_APPLET_LIBC_STRING_IMP(
strnlen,
size_t,
const char *str,
size_t maxlen) {
127 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strnlen)(str, maxlen);
129VSF_LINUX_APPLET_LIBC_STRING_IMP(
strcmp,
int,
const char *str1,
const char *str2) {
131 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strcmp)(str1, str2);
133VSF_LINUX_APPLET_LIBC_STRING_IMP(
strncmp,
int,
const char *str1,
const char *str2,
size_t n) {
135 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strncmp)(str1, str2, n);
137VSF_LINUX_APPLET_LIBC_STRING_IMP(
strdup,
char *,
const char *str) {
139 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strdup)(str);
141VSF_LINUX_APPLET_LIBC_STRING_IMP(
strcpy,
char *,
char *dest,
const char *src) {
143 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strcpy)(dest, src);
145VSF_LINUX_APPLET_LIBC_STRING_IMP(
strncpy,
char *,
char *dest,
const char *src,
size_t n) {
147 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strncpy)(dest, src, n);
149VSF_LINUX_APPLET_LIBC_STRING_IMP(
stpcpy,
char *,
char *dest,
const char *src) {
151 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
stpcpy)(dest, src);
153VSF_LINUX_APPLET_LIBC_STRING_IMP(
stpncpy,
char *,
char *dest,
const char *src,
size_t n) {
155 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
stpncpy)(dest, src, n);
157VSF_LINUX_APPLET_LIBC_STRING_IMP(
strcat,
char *,
char *dest,
const char *src) {
159 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strcat)(dest, src);
161VSF_LINUX_APPLET_LIBC_STRING_IMP(
strncat,
char *,
char *dest,
const char *str,
size_t n) {
163 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strncat)(dest, str, n);
165VSF_LINUX_APPLET_LIBC_STRING_IMP(
strcoll,
int,
const char *str1,
const char *str2) {
167 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strcoll)(str1, str2);
169VSF_LINUX_APPLET_LIBC_STRING_IMP(
strtok,
char *,
char *str,
const char *delim) {
171 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strtok)(str, delim);
173VSF_LINUX_APPLET_LIBC_STRING_IMP(
strtok_r,
char *,
char *str,
const char *delim,
char **saveptr) {
175 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strtok_r)(str, delim, saveptr);
177VSF_LINUX_APPLET_LIBC_STRING_IMP(
strxfrm,
size_t,
char *dest,
const char *src,
size_t n) {
179 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strxfrm)(dest, src, n);
181VSF_LINUX_APPLET_LIBC_STRING_IMP(
strspn,
size_t,
const char *str1,
const char *str2) {
183 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strspn)(str1, str2);
185VSF_LINUX_APPLET_LIBC_STRING_IMP(
strsep,
char *,
char **strp,
const char *delim) {
187 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strsep)(strp, delim);
189VSF_LINUX_APPLET_LIBC_STRING_IMP(
strcspn,
size_t,
const char *str1,
const char *str2) {
191 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strcspn)(str1, str2);
193VSF_LINUX_APPLET_LIBC_STRING_IMP(
strpbrk,
char *,
const char *str1,
const char *str2) {
195 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strpbrk)(str1, str2);
197VSF_LINUX_APPLET_LIBC_STRING_IMP(
strerror,
char *,
int errnum) {
199 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strerror)(errnum);
201VSF_LINUX_APPLET_LIBC_STRING_IMP(
strcasecmp,
int,
const char *str1,
const char *str2) {
203 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strcasecmp)(str1, str2);
205VSF_LINUX_APPLET_LIBC_STRING_IMP(
strncasecmp,
int,
const char *str1,
const char *str2,
size_t n) {
207 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strncasecmp)(str1, str2, n);
209VSF_LINUX_APPLET_LIBC_STRING_IMP(
memcpy,
void *,
void *dest,
const void *src,
size_t n) {
211 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
memcpy)(dest, src, n);
213VSF_LINUX_APPLET_LIBC_STRING_IMP(
mempcpy,
void *,
void *dest,
const void *src,
size_t n) {
215 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
mempcpy)(dest, src, n);
217VSF_LINUX_APPLET_LIBC_STRING_IMP(
strlcpy,
size_t,
char *dest,
const char *src,
size_t n) {
219 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strlcpy)(dest, src, n);
221VSF_LINUX_APPLET_LIBC_STRING_IMP(
strstr,
char *,
const char *str1,
const char *str2) {
223 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strstr)(str1, str2);
225VSF_LINUX_APPLET_LIBC_STRING_IMP(
strcasestr,
char *,
const char *str1,
const char *str2) {
227 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strcasestr)(str1, str2);
229VSF_LINUX_APPLET_LIBC_STRING_IMP(
strchr,
char *,
const char *str,
int c) {
231 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strchr)(str, c);
233VSF_LINUX_APPLET_LIBC_STRING_IMP(
strrchr,
char *,
const char *str,
int c) {
235 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strrchr)(str, c);
237VSF_LINUX_APPLET_LIBC_STRING_IMP(
strchrnul,
char *,
const char *str,
int c) {
239 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strchrnul)(str, c);
241VSF_LINUX_APPLET_LIBC_STRING_IMP(
memmove,
void *,
void *dest,
const void *src,
size_t n) {
243 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
memmove)(dest, src, n);
245VSF_LINUX_APPLET_LIBC_STRING_IMP(
memcmp,
int,
const void *str1,
const void *str2,
size_t n) {
247 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
memcmp)(str1, str2, n);
249VSF_LINUX_APPLET_LIBC_STRING_IMP(
memchr,
void *,
const void *buf,
int ch,
size_t count) {
251 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
memchr)(buf, ch, count);
253VSF_LINUX_APPLET_LIBC_STRING_IMP(
memrchr,
void *,
const void *buf,
int ch,
size_t count) {
255 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
memrchr)(buf, ch, count);
257VSF_LINUX_APPLET_LIBC_STRING_IMP(
strverscmp,
int,
const char *str1,
const char *str2) {
259 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strverscmp)(str1, str2);
261VSF_LINUX_APPLET_LIBC_STRING_IMP(
strndup,
char *,
const char *str,
size_t n) {
263 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strndup)(str, n);
265VSF_LINUX_APPLET_LIBC_STRING_IMP(
strsignal,
char *,
int sig) {
267 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(
strsignal)(
sig);
269VSF_LINUX_APPLET_LIBC_STRING_IMP(
sigdescr_np,
const char *,
int sig) {
283size_t strnlen(
const char *str,
size_t maxlen);
284int strcmp(
const char *str1,
const char *str2);
285int strncmp(
const char *str1,
const char *str2,
size_t n);
286int strverscmp(
const char *str1,
const char *str2);
288#if VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR == ENABLED
293#if VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR == ENABLED \
294 && VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR_TRACE_CALLER == ENABLED
295# define strdup(__str) ____strdup_ex(NULL, (char *)(__str), __FILE__, __FUNCTION__, __LINE__)
297char *
strdup(
const char *str);
299char *
strndup(
const char *str,
size_t n);
300char *
strcpy(
char *dest,
const char *src);
301char *
strncpy(
char *dest,
const char *src,
size_t n);
303char *
stpcpy(
char *dest,
const char *src);
304char *
stpncpy(
char *dest,
const char *src,
size_t n);
305char *
strcat(
char *dest,
const char *src);
306char *
strncat(
char *dest,
const char *str,
size_t n);
307int strcoll(
const char *str1,
const char *str2);
308char *
strtok(
char *str,
const char *delim);
309char *
strtok_r(
char *str,
const char *delim,
char **saveptr);
310size_t strxfrm(
char *dest,
const char *src,
size_t n);
311size_t strspn(
const char *str1,
const char *str2);
312char *
strsep(
char **strp,
const char *delim);
313size_t strcspn(
const char *str1,
const char *str2);
314char *
strpbrk(
const char *str1,
const char *str2);
317int strerror_r(
int errnum,
char *buf,
size_t buflen);
320# ifndef _CONST_RETURN
322# define _CONST_RETURN const
324# define _CONST_RETURN
328# ifndef __VSF_APPLET__
329int stricmp(
const char *str1,
const char *str2);
330int strnicmp(
const char *str1,
const char *str2,
size_t n);
332# define strcasecmp stricmp
335# define strncasecmp strnicmp
339# if defined(__CPU_X64__)
340void *
memcpy(
void *dest,
const void *src,
unsigned long long n);
342void *
memcpy(
void *dest,
const void *src,
unsigned int n);
345# define _CONST_RETURN
348void *
memcpy(
void *dest,
const void *src,
size_t n);
349size_t strlcpy(
char *dest,
const char *src,
size_t n);
351void *
mempcpy(
void *dest,
const void *src,
size_t n);
361void *
memmove(
void *dest,
const void *src,
size_t n);
362int memcmp(
const void *str1,
const void *str2,
size_t n);
374#if __IS_COMPILER_LLVM__
375# pragma clang diagnostic pop
Definition vsf_linux.h:281
int ssize_t
Definition types.h:71
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:38
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)
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:345
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:33
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:295
_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
#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