patch 8.0.1046: code duplication in diff mode
Problem: Code duplication in diff mode.
Solution: Use diff_equal_char() also in diff_cmp(). (Rick Howe)
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.
*/