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