diff --git a/src/chars.c b/src/chars.c index 91a395c3c10370b3b386cf3b399b617acaeac263..dc46d49d1947002edef36118179ef46023232953 100644 --- a/src/chars.c +++ b/src/chars.c @@ -542,7 +542,6 @@ int mbstrncasecmp(const char *s1, const char *s2, size_t n) { #ifdef ENABLE_UTF8 if (use_utf8) { - char *mbchar1, *mbchar2; wchar_t wc1, wc2; if (s1 == s2) @@ -550,25 +549,19 @@ int mbstrncasecmp(const char *s1, const char *s2, size_t n) assert(s1 != NULL && s2 != NULL); - mbchar1 = charalloc(MB_CUR_MAX); - mbchar2 = charalloc(MB_CUR_MAX); - for (; *s1 != '\0' && *s2 != '\0' && n > 0; s1 += move_mbright(s1, 0), s2 += move_mbright(s2, 0), n--) { bool bad1 = FALSE, bad2 = FALSE; - int len1 = parse_mbchar(s1, mbchar1, NULL); - int len2 = parse_mbchar(s2, mbchar2, NULL); - - if (mbtowc(&wc1, mbchar1, len1) < 0) { + if (mbtowc(&wc1, s1, MB_CUR_MAX) < 0) { mbtowc_reset(); - wc1 = (unsigned char)*mbchar1; + wc1 = (unsigned char)*s1; bad1 = TRUE; } - if (mbtowc(&wc2, mbchar2, len2) < 0) { + if (mbtowc(&wc2, s2, MB_CUR_MAX) < 0) { mbtowc_reset(); - wc2 = (unsigned char)*mbchar2; + wc2 = (unsigned char)*s2; bad2 = TRUE; } @@ -576,9 +569,6 @@ int mbstrncasecmp(const char *s1, const char *s2, size_t n) break; } - free(mbchar1); - free(mbchar2); - return (n > 0) ? towlower(wc1) - towlower(wc2) : 0; } else #endif