commit 7d3d3dec9a94734f8c8d9b2b019dfbec05f38798
parent 6240805c4131c350f26f065e832d58f7bac8e0ec
Author: Benno Schulenberg <bensberg@justemail.net>
Date: Sun, 30 Apr 2017 18:07:04 +0200
tweaks: use the logic from revstrstr() also in mbrevstrcasestr()
Because it is slightly faster.
Diffstat:
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git 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