diff options
Diffstat (limited to 'dlib/dlib.c')
-rw-r--r-- | dlib/dlib.c | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/dlib/dlib.c b/dlib/dlib.c index a3c59060..002adcdf 100644 --- a/dlib/dlib.c +++ b/dlib/dlib.c @@ -173,16 +173,21 @@ char *dStrsep(char **orig, const char *delim) } /* + * ASCII functions to avoid the case difficulties introduced by I/i in + * Turkic locales. + */ + +/* * Case insensitive strstr */ -char *dStristr(const char *haystack, const char *needle) +char *dStriAsciiStr(const char *haystack, const char *needle) { int i, j; char *ret = NULL; if (haystack && needle) { for (i = 0, j = 0; haystack[i] && needle[j]; ++i) - if (tolower(haystack[i]) == tolower(needle[j])) { + if (D_ASCII_TOLOWER(haystack[i]) == D_ASCII_TOLOWER(needle[j])) { ++j; } else if (j) { i -= j; @@ -194,6 +199,29 @@ char *dStristr(const char *haystack, const char *needle) return ret; } +int dStrAsciiCasecmp(const char *s1, const char *s2) +{ + int ret = 0; + + while ((*s1 || *s2) && + !(ret = D_ASCII_TOLOWER(*s1) - D_ASCII_TOLOWER(*s2))) { + s1++; + s2++; + } + return ret; +} + +int dStrnAsciiCasecmp(const char *s1, const char *s2, size_t n) +{ + int ret = 0; + + while (n-- && (*s1 || *s2) && + !(ret = D_ASCII_TOLOWER(*s1) - D_ASCII_TOLOWER(*s2))) { + s1++; + s2++; + } + return ret; +} /* *- dStr ---------------------------------------------------------------------- |