From 7d3d3dec9a94734f8c8d9b2b019dfbec05f38798 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg <bensberg@justemail.net> Date: Sun, 30 Apr 2017 18:07:04 +0200 Subject: [PATCH] tweaks: use the logic from revstrstr() also in mbrevstrcasestr() Because it is slightly faster. --- src/chars.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/chars.c b/src/chars.c index 82d06c93..ba134d5e 100644 --- a/src/chars.c +++ b/src/chars.c @@ -535,29 +535,29 @@ char *mbrevstrcasestr(const char *haystack, const char *needle, { #ifdef ENABLE_UTF8 if (use_utf8) { - size_t tail_len, needle_len; + size_t needle_len = mbstrlen(needle); + size_t tail_len = mbstrlen(pointer); - if (*needle == '\0') + if (needle_len == 0) return (char *)pointer; - needle_len = mbstrlen(needle); - if (mbstrlen(haystack) < needle_len) return NULL; - tail_len = mbstrlen(pointer); + if (tail_len < needle_len) + pointer += tail_len - needle_len; + + if (pointer < haystack) + return NULL; while (TRUE) { - if (tail_len >= needle_len && - mbstrncasecmp(pointer, needle, needle_len) == 0) + if (mbstrncasecmp(pointer, needle, needle_len) == 0) return (char *)pointer; - /* If we've reached the head of the haystack, we found nothing. */ if (pointer == haystack) return NULL; pointer = haystack + move_mbleft(haystack, pointer - haystack); - tail_len++; } } else #endif -- GitLab