summaryrefslogtreecommitdiff
path: root/usr.bin/diff
diff options
context:
space:
mode:
authorXin LI <delphij@FreeBSD.org>2018-07-27 05:21:20 +0000
committerXin LI <delphij@FreeBSD.org>2018-07-27 05:21:20 +0000
commit9977c7b5127ed393b291323fc095f65b39ab7a99 (patch)
treee99f2bc3b2f67a5453b8adfdc23d47dc128b11e9 /usr.bin/diff
parent324976739f3c03838bf53eb4edbbac736b9d87d8 (diff)
downloadsrc-test2-9977c7b5127ed393b291323fc095f65b39ab7a99.tar.gz
src-test2-9977c7b5127ed393b291323fc095f65b39ab7a99.zip
Improve --strip-trailing-cr handling:
- Advance ctold for f1 and ctnew for f2 - ungetc() if the character is unexpected - Don't break early when we hit the combination on one side PR: 230049 Reported by: maskray <emacsray gmail com> Reviewed by: bapt, maskray MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D16451
Notes
Notes: svn path=/head/; revision=336754
Diffstat (limited to 'usr.bin/diff')
-rw-r--r--usr.bin/diff/diffreg.c13
-rwxr-xr-xusr.bin/diff/tests/diff_test.sh11
2 files changed, 19 insertions, 5 deletions
diff --git a/usr.bin/diff/diffreg.c b/usr.bin/diff/diffreg.c
index 1450da77df03..47825e1daf46 100644
--- a/usr.bin/diff/diffreg.c
+++ b/usr.bin/diff/diffreg.c
@@ -720,19 +720,22 @@ check(FILE *f1, FILE *f2, int flags)
}
ctold++;
ctnew++;
- if (flags & D_STRIPCR) {
+ if (flags & D_STRIPCR && (c == '\r' || d == '\r')) {
if (c == '\r') {
if ((c = getc(f1)) == '\n') {
- ctnew++;
- break;
+ ctold++;
+ } else {
+ ungetc(c, f1);
}
}
if (d == '\r') {
if ((d = getc(f2)) == '\n') {
- ctold++;
- break;
+ ctnew++;
+ } else {
+ ungetc(d, f2);
}
}
+ break;
}
if ((flags & D_FOLDBLANKS) && isspace(c) &&
isspace(d)) {
diff --git a/usr.bin/diff/tests/diff_test.sh b/usr.bin/diff/tests/diff_test.sh
index 9b97f19f7297..557eea049d4e 100755
--- a/usr.bin/diff/tests/diff_test.sh
+++ b/usr.bin/diff/tests/diff_test.sh
@@ -8,6 +8,7 @@ atf_test_case ifdef
atf_test_case group_format
atf_test_case side_by_side
atf_test_case brief_format
+atf_test_case b230049
simple_body()
{
@@ -52,6 +53,15 @@ unified_body()
diff -u9999 -L input_c1.in -L input_c2.in "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in"
}
+b230049_body()
+{
+ printf 'a\nb\r\nc\n' > b230049_a.in
+ printf 'a\r\nb\r\nc\r\n' > b230049_b.in
+ atf_check -o empty -s eq:0 \
+ diff -up --strip-trailing-cr -L b230049_a.in -L b230049_b.in \
+ b230049_a.in b230049_b.in
+}
+
header_body()
{
export TZ=UTC
@@ -150,4 +160,5 @@ atf_init_test_cases()
atf_add_test_case group_format
atf_add_test_case side_by_side
atf_add_test_case brief_format
+ atf_add_test_case b230049
}