diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/strs.c | 33 | ||||
| -rw-r--r-- | src/core/strs.h | 1 |
2 files changed, 29 insertions, 5 deletions
diff --git a/src/core/strs.c b/src/core/strs.c index a03c0bb5..66a385d0 100644 --- a/src/core/strs.c +++ b/src/core/strs.c @@ -134,14 +134,35 @@ nni_strcasestr(const char *s1, const char *s2) } int +nni_strcasecmp(const char *s1, const char *s2) +{ +#if defined(_WIN32) + return (_stricmp(s1, s2)); +#elif defined(NNG_HAVE_STRCASECMP) + return (strcasecmp(s1, s2)); +#else + for (;;) { + uint8_t c1 = (uint8_t) tolower(*s1++); + uint8_t c2 = (uint8_t) tolower(*s2++); + if (c1 == c2) { + if (c1 == 0) { + return (0); + } + continue; + } + return ((c1 < c2) ? -1 : 1); + } + return (0); +#endif +} + +int nni_strncasecmp(const char *s1, const char *s2, size_t n) { -#ifdef NNG_HAVE_STRNCASECMP -#ifdef _WIN32 +#if defined(_WIN32) return (_strnicmp(s1, s2, n)); -#else +#elif defined(NNG_HAVE_STRNCASECMP) return (strncasecmp(s1, s2, n)); -#endif #else for (int i = 0; i < n; i++) { uint8_t c1 = (uint8_t) tolower(*s1++); @@ -152,12 +173,14 @@ nni_strncasecmp(const char *s1, const char *s2, size_t n) } continue; } - return (c1 < c2 ? -1 : 1); + return ((c1 < c2) ? -1 : 1); } return (0); #endif } +// As with strdup, we always use our own, so that our strings +// can be freed with nni_strfree(). int nni_asprintf(char **sp, const char *fmt, ...) { diff --git a/src/core/strs.h b/src/core/strs.h index 3b369fe4..d4851ecf 100644 --- a/src/core/strs.h +++ b/src/core/strs.h @@ -20,6 +20,7 @@ extern size_t nni_strlcat(char *, const char *, size_t); extern size_t nni_strnlen(const char *, size_t); extern char * nni_strcasestr(const char *, const char *); extern int nni_strncasecmp(const char *, const char *, size_t); +extern int nni_strcasecmp(const char *, const char *); extern int nni_asprintf(char **, const char *, ...); #endif // CORE_STRS_H |
