aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2015-01-11 16:41:54 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2015-01-11 16:41:54 +0100
commit39f017293a047ac1063c84263d4d855b86c62ba1 (patch)
tree688381313ce2ba8db50ee58e8d5007462fa9e9c4
parent70f4320b40b7af83525cebabab2bc437a22c41d2 (diff)
downloadbusybox-w32-39f017293a047ac1063c84263d4d855b86c62ba1.tar.gz
busybox-w32-39f017293a047ac1063c84263d4d855b86c62ba1.tar.bz2
busybox-w32-39f017293a047ac1063c84263d4d855b86c62ba1.zip
diff: fix a bug in diffing against stdin. Closes 7784
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--editors/diff.c3
-rwxr-xr-xtestsuite/diff.tests11
2 files changed, 13 insertions, 1 deletions
diff --git a/editors/diff.c b/editors/diff.c
index a78a0ee28..c3ad31bf3 100644
--- a/editors/diff.c
+++ b/editors/diff.c
@@ -740,9 +740,10 @@ static int diffreg(char *file[2])
740 unlink(name); 740 unlink(name);
741 if (bb_copyfd_eof(fd, fd_tmp) < 0) 741 if (bb_copyfd_eof(fd, fd_tmp) < 0)
742 xfunc_die(); 742 xfunc_die();
743 if (fd) /* Prevents closing of stdin */ 743 if (fd != STDIN_FILENO)
744 close(fd); 744 close(fd);
745 fd = fd_tmp; 745 fd = fd_tmp;
746 xlseek(fd, 0, SEEK_SET);
746 } 747 }
747 fp[i] = fdopen(fd, "r"); 748 fp[i] = fdopen(fd, "r");
748 } 749 }
diff --git a/testsuite/diff.tests b/testsuite/diff.tests
index 6de46483b..84d853852 100755
--- a/testsuite/diff.tests
+++ b/testsuite/diff.tests
@@ -44,6 +44,17 @@ testing "diff of stdin, twice" \
44 "" \ 44 "" \
45 "stdin" 45 "stdin"
46 46
47testing "diff of empty file against stdin" \
48 "diff -u - input | $TRIM_TAB" \
49"\
50--- -
51+++ input
52@@ -1 +0,0 @@
53-a
54" \
55 "" \
56 "a\n"
57
47testing "diff of empty file against nonempty one" \ 58testing "diff of empty file against nonempty one" \
48 "diff -u - input | $TRIM_TAB" \ 59 "diff -u - input | $TRIM_TAB" \
49"\ 60"\