diff --git a/src/chars.c b/src/chars.c
index e861c939b7c1c8777a73a1201adc89bb0a135b1a..d80bd3af9f1a23dc069198ac6fe60fc3af9c24e0 100644
--- a/src/chars.c
+++ b/src/chars.c
@@ -512,8 +512,7 @@ int mbstrncasecmp(const char *s1, const char *s2, size_t n)
 
 	assert(s1 != NULL && s2 != NULL);
 
-	for (; *s1 != '\0' && *s2 != '\0' && n > 0;
-		s1 += move_mbright(s1, 0), s2 += move_mbright(s2, 0), n--) {
+	while (*s1 != '\0' && *s2 != '\0' && n > 0) {
 	    bool bad1 = FALSE, bad2 = FALSE;
 
 	    if (mbtowc(&wc1, s1, MB_CUR_MAX) < 0) {
@@ -530,6 +529,10 @@ int mbstrncasecmp(const char *s1, const char *s2, size_t n)
 
 	    if (bad1 != bad2 || towlower(wc1) != towlower(wc2))
 		break;
+
+	    s1 += move_mbright(s1, 0);
+	    s2 += move_mbright(s2, 0);
+	    n--;
 	}
 
 	return (n > 0) ? towlower(wc1) - towlower(wc2) : 0;