]> granicus.if.org Git - vim/commitdiff
patch 8.0.1046: code duplication in diff mode v8.0.1046
authorBram Moolenaar <Bram@vim.org>
Sun, 3 Sep 2017 13:04:21 +0000 (15:04 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 3 Sep 2017 13:04:21 +0000 (15:04 +0200)
Problem:    Code duplication in diff mode.
Solution:   Use diff_equal_char() also in diff_cmp(). (Rick Howe)

src/diff.c
src/version.c

index cd3ffa48f12ecba1cfb252f4f58205d316f3182a..0e352d8938e3ca71faab2413065bac9312ceca45 100644 (file)
@@ -1660,6 +1660,40 @@ diff_equal_entry(diff_T *dp, int idx1, int idx2)
     return TRUE;
 }
 
+/*
+ * 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;
        }
     }
 
@@ -1949,40 +1963,6 @@ diffopt_horizontal(void)
     return (diff_flags & DIFF_HORIZONTAL) != 0;
 }
 
-/*
- * 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.
index b1e2d5a7a3bf5ceee9602586845adf4988fc85f3..a57e11f5b7571f40b2efe9bcb656a8a4e8925aa4 100644 (file)
@@ -769,6 +769,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1046,
 /**/
     1045,
 /**/