aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/strs.c33
-rw-r--r--src/core/strs.h1
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