diff options
Diffstat (limited to 'src/libstddjb/case_str.c')
-rw-r--r-- | src/libstddjb/case_str.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/libstddjb/case_str.c b/src/libstddjb/case_str.c new file mode 100644 index 0000000..14409c3 --- /dev/null +++ b/src/libstddjb/case_str.c @@ -0,0 +1,32 @@ +/* ISC license. */ + +#include <skalibs/config.h> +#include <skalibs/sysdeps.h> + +#if defined(SKALIBS_HASSTRCASESTR) && !defined(SKALIBS_FLAG_REPLACE_LIBC) + +#include <skalibs/nonposix.h> +#include <string.h> +#include <skalibs/bytestr.h> + +unsigned int case_str (char const *haystack, char const *needle) +{ + register char *p = strcasestr(haystack, needle) ; + return p ? p - haystack : str_len(haystack) ; +} + +#else + +#include <skalibs/bytestr.h> + +unsigned int case_str (char const *haystack, char const *needle) +{ + unsigned int nlen = str_len(needle) ; + register char const *p = haystack ; + if (!nlen) return 0 ; + for (; *p ; p++) + if (!case_diffb(p, nlen, needle)) return p - haystack ; + return str_len(haystack) ; +} + +#endif |