summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-09-03 15:04:21 +0200
committerBram Moolenaar <Bram@vim.org>2017-09-03 15:04:21 +0200
commitae96b8d058cffd9d07b78cb7a9ccd382185b9dd6 (patch)
tree883e83fc0f48ff9f51819d773d0abb948ccdcc43
parent6a8691d483914606213a24356a9124fa41c93b69 (diff)
downloadvim-git-ae96b8d058cffd9d07b78cb7a9ccd382185b9dd6.tar.gz
patch 8.0.1046: code duplication in diff modev8.0.1046
Problem: Code duplication in diff mode. Solution: Use diff_equal_char() also in diff_cmp(). (Rick Howe)
-rw-r--r--src/diff.c94
-rw-r--r--src/version.c2
2 files changed, 39 insertions, 57 deletions
diff --git a/src/diff.c b/src/diff.c
index cd3ffa48f..0e352d893 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -1661,6 +1661,40 @@ diff_equal_entry(diff_T *dp, int idx1, int idx2)
}
/*
+ * 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 @@ diff_cmp(char_u *s1, char_u *s2)
}
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 @@ diffopt_horizontal(void)
}
/*
- * 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.
*/
diff --git a/src/version.c b/src/version.c
index b1e2d5a7a..a57e11f5b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1046,
+/**/
1045,
/**/
1044,