util/stringops: add memmem() polyfill
This commit is contained in:
parent
b0beea92dd
commit
e1b1fecaf2
3 changed files with 29 additions and 1 deletions
|
@ -272,7 +272,7 @@ config.set('TAISEI_BUILDCONF_HAVE_POSIX', have_posix)
|
|||
config.set('TAISEI_BUILDCONF_HAVE_SINCOS', cc.has_function('sincos', dependencies : dep_m))
|
||||
|
||||
use_gnu_funcs = false
|
||||
gnu_funcs = ['sincos', 'strtok_r', 'memrchr']
|
||||
gnu_funcs = ['sincos', 'strtok_r', 'memrchr', 'memmem']
|
||||
|
||||
foreach f : gnu_funcs
|
||||
have = cc.has_function(f, dependencies : dep_m)
|
||||
|
|
|
@ -431,3 +431,24 @@ void *memrchr(const void *s, int c, size_t n) {
|
|||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef TAISEI_BUILDCONF_HAVE_MEMMEM
|
||||
#undef memmem
|
||||
#define memmem _ts_memmem
|
||||
void *memmem(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen) {
|
||||
const char *p_haystack = haystack;
|
||||
const char *e_haystack = p_haystack + haystacklen;
|
||||
|
||||
for(;;) {
|
||||
if(needlelen > e_haystack - p_haystack) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if(!memcmp(p_haystack, needle, needlelen)) {
|
||||
return (void*)p_haystack;
|
||||
}
|
||||
|
||||
++p_haystack;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -44,6 +44,13 @@ char *strtok_r(char *str, const char *delim, char **nextp);
|
|||
void *memrchr(const void *s, int c, size_t n);
|
||||
#endif
|
||||
|
||||
#ifndef TAISEI_BUILDCONF_HAVE_MEMMEM
|
||||
#undef memmem
|
||||
#define memmem _ts_memmem
|
||||
void *memmem(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen)
|
||||
attr_nonnull_all;
|
||||
#endif
|
||||
|
||||
#undef strcasecmp
|
||||
#define strcasecmp SDL_strcasecmp
|
||||
|
||||
|
|
Loading…
Reference in a new issue