diff --git a/src/diff.c b/src/diff.c
index cd3ffa4..0e352d8 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -1661,6 +1661,40 @@
 }
 
 /*
+ * Compare the characters at "p1" and "p2".  If they are equal (possibly
+ * ignoring case) return TRUE and set "len" to the number of bytes.
+ */
+    static int
+diff_equal_char(char_u *p1, char_u *p2, int *len)
+{
+#ifdef FEAT_MBYTE
+    int l  = (*mb_ptr2len)(p1);
+
+    if (l != (*mb_ptr2len)(p2))
+	return FALSE;
+    if (l > 1)
+    {
+	if (STRNCMP(p1, p2, l) != 0
+		&& (!enc_utf8
+		    || !(diff_flags & DIFF_ICASE)
+		    || utf_fold(utf_ptr2char(p1))
+						!= utf_fold(utf_ptr2char(p2))))
+	    return FALSE;
+	*len = l;
+    }
+    else
+#endif
+    {
+	if ((*p1 != *p2)
+		&& (!(diff_flags & DIFF_ICASE)
+		    || TOLOWER_LOC(*p1) != TOLOWER_LOC(*p2)))
+	    return FALSE;
+	*len = 1;
+    }
+    return TRUE;
+}
+
+/*
  * Compare strings "s1" and "s2" according to 'diffopt'.
  * Return non-zero when they are different.
  */
@@ -1689,30 +1723,10 @@
 	}
 	else
 	{
-#ifdef FEAT_MBYTE
-	    l  = (*mb_ptr2len)(p1);
-	    if (l != (*mb_ptr2len)(p2))
+	    if (!diff_equal_char(p1, p2, &l))
 		break;
-	    if (l > 1)
-	    {
-		if (STRNCMP(p1, p2, l) != 0
-			&& (!enc_utf8
-			    || !(diff_flags & DIFF_ICASE)
-			    || utf_fold(utf_ptr2char(p1))
-					       != utf_fold(utf_ptr2char(p2))))
-		    break;
-		p1 += l;
-		p2 += l;
-	    }
-	    else
-#endif
-	    {
-		if (*p1 != *p2 && (!(diff_flags & DIFF_ICASE)
-				     || TOLOWER_LOC(*p1) != TOLOWER_LOC(*p2)))
-		    break;
-		++p1;
-		++p2;
-	    }
+	    p1 += l;
+	    p2 += l;
 	}
     }
 
@@ -1950,40 +1964,6 @@
 }
 
 /*
- * Compare the characters at "p1" and "p2".  If they are equal (possibly
- * ignoring case) return TRUE and set "len" to the number of bytes.
- */
-    static int
-diff_equal_char(char_u *p1, char_u *p2, int *len)
-{
-#ifdef FEAT_MBYTE
-    int l  = (*mb_ptr2len)(p1);
-
-    if (l != (*mb_ptr2len)(p2))
-	return FALSE;
-    if (l > 1)
-    {
-	if (STRNCMP(p1, p2, l) != 0
-		&& (!enc_utf8
-		    || !(diff_flags & DIFF_ICASE)
-		    || utf_fold(utf_ptr2char(p1))
-						!= utf_fold(utf_ptr2char(p2))))
-	    return FALSE;
-	*len = l;
-    }
-    else
-#endif
-    {
-	if ((*p1 != *p2)
-		&& (!(diff_flags & DIFF_ICASE)
-		    || TOLOWER_LOC(*p1) != TOLOWER_LOC(*p2)))
-	    return FALSE;
-	*len = 1;
-    }
-    return TRUE;
-}
-
-/*
  * Find the difference within a changed line.
  * Returns TRUE if the line was added, no other buffer has it.
  */
