0
0
mirror of https://github.com/vim/vim.git synced 2025-07-25 10:54:51 -04:00

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)
This commit is contained in:
Bram Moolenaar 2017-09-03 15:04:21 +02:00
parent 6a8691d483
commit ae96b8d058
2 changed files with 39 additions and 57 deletions

View File

@ -1660,6 +1660,40 @@ diff_equal_entry(diff_T *dp, int idx1, int idx2)
return TRUE; 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'. * Compare strings "s1" and "s2" according to 'diffopt'.
* Return non-zero when they are different. * Return non-zero when they are different.
@ -1689,30 +1723,10 @@ diff_cmp(char_u *s1, char_u *s2)
} }
else else
{ {
#ifdef FEAT_MBYTE if (!diff_equal_char(p1, p2, &l))
l = (*mb_ptr2len)(p1);
if (l != (*mb_ptr2len)(p2))
break; break;
if (l > 1) p1 += l;
{ p2 += l;
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;
}
} }
} }
@ -1949,40 +1963,6 @@ diffopt_horizontal(void)
return (diff_flags & DIFF_HORIZONTAL) != 0; 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. * Find the difference within a changed line.
* Returns TRUE if the line was added, no other buffer has it. * Returns TRUE if the line was added, no other buffer has it.

View File

@ -769,6 +769,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1046,
/**/ /**/
1045, 1045,
/**/ /**/