summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS4
-rw-r--r--src/tail.c5
-rwxr-xr-xtests/tail-2/pipe-f.sh11
3 files changed, 18 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index 200c12b90..7780d5288 100644
--- a/NEWS
+++ b/NEWS
@@ -51,6 +51,10 @@ GNU coreutils NEWS -*- outline -*-
and is now handled correctly in all cases.
[bug introduced in fileutils-4.0h]
+ tail -f - 'untailable file' will now terminate when there is no more data
+ to read from stdin. Previously it behaved as if --retry was specified.
+ [This bug was present in "the beginning".]
+
yes now handles short writes, rather than assuming all writes complete.
[bug introduced in coreutils-8.24]
diff --git a/src/tail.c b/src/tail.c
index 718fc8a34..96982ed5b 100644
--- a/src/tail.c
+++ b/src/tail.c
@@ -2212,7 +2212,10 @@ ignore_fifo_and_pipe (struct File_spec *f, size_t n_files)
&& (S_ISFIFO (f[i].mode)
|| (HAVE_FIFO_PIPES != 1 && isapipe (f[i].fd))));
if (is_a_fifo_or_pipe)
- f[i].ignore = true;
+ {
+ f[i].fd = -1;
+ f[i].ignore = true;
+ }
else
++n_viable;
}
diff --git a/tests/tail-2/pipe-f.sh b/tests/tail-2/pipe-f.sh
index 7abb7d6fe..82364dacc 100755
--- a/tests/tail-2/pipe-f.sh
+++ b/tests/tail-2/pipe-f.sh
@@ -19,9 +19,18 @@
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
print_ver_ tail
+echo oo > exp || framework_failure_
echo foo | timeout 10 tail -f -c3 > out || fail=1
-echo oo > exp || fail=1
+compare exp out || fail=1
+
+cat <<\EOF > exp
+==> standard input <==
+ar
+==> missing <==
+EOF
+mkdir missing || framework_failure_
+echo bar | returns_ 1 timeout 10 tail -f -c3 - missing > out || fail=1
compare exp out || fail=1
Exit $fail