VSF Documented
string.h
Go to the documentation of this file.
1#ifndef __SIMPLE_LIBC_STRING_H__
2#define __SIMPLE_LIBC_STRING_H__
3
5
6#if VSF_LINUX_CFG_RELATIVE_PATH == ENABLED && VSF_LINUX_USE_SIMPLE_LIBC == ENABLED
7# include "./stddef.h"
8#else
9# include <stddef.h>
10#endif
11#include "./strings.h"
12
15
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"
21#endif
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
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)
30// strdup will be macro in this condition, so no need to wrapper
31#define strdup VSF_LINUX_LIBC_WRAPPER(strdup)
32# endif
33#define strndup VSF_LINUX_LIBC_WRAPPER(strndup)
34#endif
35
36#if VSF_LINUX_APPLET_USE_LIBC_STRING == ENABLED
39
83# ifndef __VSF_APPLET__
85# endif
86#endif
87
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
90
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))
95# else
96# define VSF_LINUX_APPLET_LIBC_STRING_VPLT \
97 ((vsf_linux_libc_string_vplt_t *)vsf_vplt((void *)0))
98# endif
99#endif
100
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__)
105
106#if VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR == ENABLED
108VSF_LINUX_APPLET_LIBC_STRING_IMP(____strdup_ex, char *, vsf_linux_process_t *process, const char *str, const char *file, const char *func, int line) {
110 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(____strdup_ex)(process, str, file, func, line);
111}
112#endif
113VSF_LINUX_APPLET_LIBC_STRING_IMP(ffs, int, int i) {
115 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(ffs)(i);
116}
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);
120}
121VSF_LINUX_APPLET_LIBC_STRING_IMP(strlen, size_t, const char *str) {
123 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(strlen)(str);
124}
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);
128}
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);
132}
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);
136}
137VSF_LINUX_APPLET_LIBC_STRING_IMP(strdup, char *, const char *str) {
139 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(strdup)(str);
140}
141VSF_LINUX_APPLET_LIBC_STRING_IMP(strcpy, char *, char *dest, const char *src) {
143 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(strcpy)(dest, src);
144}
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);
148}
149VSF_LINUX_APPLET_LIBC_STRING_IMP(stpcpy, char *, char *dest, const char *src) {
151 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(stpcpy)(dest, src);
152}
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);
156}
157VSF_LINUX_APPLET_LIBC_STRING_IMP(strcat, char *, char *dest, const char *src) {
159 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(strcat)(dest, src);
160}
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);
164}
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);
168}
169VSF_LINUX_APPLET_LIBC_STRING_IMP(strtok, char *, char *str, const char *delim) {
171 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(strtok)(str, delim);
172}
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);
176}
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);
180}
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);
184}
185VSF_LINUX_APPLET_LIBC_STRING_IMP(strsep, char *, char **strp, const char *delim) {
187 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(strsep)(strp, delim);
188}
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);
192}
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);
196}
197VSF_LINUX_APPLET_LIBC_STRING_IMP(strerror, char *, int errnum) {
199 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(strerror)(errnum);
200}
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);
204}
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);
208}
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);
212}
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);
216}
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);
220}
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);
224}
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);
228}
229VSF_LINUX_APPLET_LIBC_STRING_IMP(strchr, char *, const char *str, int c) {
231 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(strchr)(str, c);
232}
233VSF_LINUX_APPLET_LIBC_STRING_IMP(strrchr, char *, const char *str, int c) {
235 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(strrchr)(str, c);
236}
237VSF_LINUX_APPLET_LIBC_STRING_IMP(strchrnul, char *, const char *str, int c) {
239 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(strchrnul)(str, c);
240}
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);
244}
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);
248}
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);
252}
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);
256}
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);
260}
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);
264}
265VSF_LINUX_APPLET_LIBC_STRING_IMP(strsignal, char *, int sig) {
267 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(strsignal)(sig);
268}
269VSF_LINUX_APPLET_LIBC_STRING_IMP(sigdescr_np, const char *, int sig) {
271 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(sigdescr_np)(sig);
272}
273VSF_LINUX_APPLET_LIBC_STRING_IMP(sigabbrev_np, const char *, int sig) {
275 return VSF_LINUX_APPLET_LIBC_STRING_ENTRY(sigabbrev_np)(sig);
276}
277
278#else // __VSF_APPLET__ && VSF_LINUX_APPLET_USE_LIBC_STRING
279
280int ffs(int i);
281void * memset(void *s, int ch, size_t n);
282size_t strlen(const char *str);
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);
287
288#if VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR == ENABLED
290char * ____strdup_ex(vsf_linux_process_t *process, const char *str, const char *file, const char *func, int line);
291#endif
292
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__)
296#else
297char * strdup(const char *str);
298#endif
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);
302ssize_t strscpy(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);
315char * strerror(int errnum);
316// XSI-compliant
317int strerror_r(int errnum, char *buf, size_t buflen);
318
319#if defined(__WIN__)
320# ifndef _CONST_RETURN
321# ifdef __cplusplus
322# define _CONST_RETURN const
323# else
324# define _CONST_RETURN
325# endif
326# endif
327
328# ifndef __VSF_APPLET__
329int stricmp(const char *str1, const char *str2);
330int strnicmp(const char *str1, const char *str2, size_t n);
331# ifndef strcasecmp
332# define strcasecmp stricmp
333# endif
334# ifndef strncasecmp
335# define strncasecmp strnicmp
336# endif
337# endif
338
339# if defined(__CPU_X64__)
340void * memcpy(void *dest, const void *src, unsigned long long n);
341# else
342void * memcpy(void *dest, const void *src, unsigned int n);
343# endif
344#else
345# define _CONST_RETURN
346int strcasecmp(const char *str1, const char *str2);
347int strncasecmp(const char *str1, const char *str2, size_t n);
348void * memcpy(void *dest, const void *src, size_t n);
349size_t strlcpy(char *dest, const char *src, size_t n);
350#endif
351void * mempcpy(void *dest, const void *src, size_t n);
352
353_CONST_RETURN char * strstr(const char *str1, const char *str2);
354_CONST_RETURN char * strchr(const char *str, int c);
355_CONST_RETURN char * strrchr(const char *str, int c);
356_CONST_RETURN char * strchrnul(const char *str, int c);
357_CONST_RETURN void * memchr(const void *buf, int ch, size_t count);
358_CONST_RETURN void * memrchr(const void *buf, int ch, size_t count);
359char * strcasestr(const char *haystack, const char *needle);
360
361void * memmove(void *dest, const void *src, size_t n);
362int memcmp(const void *str1, const void *str2, size_t n);
363
364char * strsignal(int sig);
365const char * sigdescr_np(int sig);
366const char * sigabbrev_np(int sig);
367
368#endif // __VSF_APPLET__ && VSF_LINUX_APPLET_USE_LIBC_STRING
369
370#ifdef __cplusplus
371}
372#endif
373
374#if __IS_COMPILER_LLVM__
375# pragma clang diagnostic pop
376#endif
377
378#endif
Definition vsf_linux.h:281
int ssize_t
Definition types.h:71
Definition string.h:37
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(____strdup_ex)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strcasecmp)
vsf_vplt_info_t info
Definition string.h:38
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(sigabbrev_np)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strtok_r)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strncasecmp)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strerror)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strverscmp)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strsignal)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(strchrnul)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(sigdescr_np)
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
Definition vsf_cfg.h:95
#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
Generated from commit: vsfteam/vsf@f33b89f