From: Pádraig Brady
Date: Mon, 9 Dec 2013 01:58:25 +0000 (+0000) Subject: tail: use consistent diagnostics with and without inotify X-Git-Tag: v8.22~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=402e8ecbc4bf3b3fe866338e77e21feceac910f0;p=thirdparty%2Fcoreutils.git tail: use consistent diagnostics with and without inotify * src/tail.c: With inotify, when a file is initially absent, we fstat(-1) for that file spec, thus recording an errnum of EBADF, which caused the "has become accessible" diagnostic to be issued, when the file first appears. Instead we avoid the fstat(-1) and thus emit the more natural and consistent "has appeared" diagnostic. * tests/tail-2/retry.sh: Use the new diagnostic which also causes this test to pass on systems without inotify. --- diff --git a/src/tail.c b/src/tail.c index c781dc2fac..dc4e10df00 100644 --- a/src/tail.c +++ b/src/tail.c @@ -1315,7 +1315,12 @@ static void check_fspec (struct File_spec *fspec, int wd, int *prev_wd) { struct stat stats; - char const *name = pretty_name (fspec); + char const *name; + + if (fspec->fd == -1) + return; + + name = pretty_name (fspec); if (fstat (fspec->fd, &stats) != 0) { diff --git a/tests/tail-2/retry.sh b/tests/tail-2/retry.sh index 7ba7734757..ce67a45942 100755 --- a/tests/tail-2/retry.sh +++ b/tests/tail-2/retry.sh @@ -53,11 +53,11 @@ retry_delay_ wait4lines_ .1 6 3 || fail=1 # Wait for the expected output. kill $pid wait $pid # Expect 3 lines in the output file. -[ $( wc -l < out ) = 3 ] || { fail=1; cat out; } -grep -F 'cannot open' out || { fail=1; cat out; } -grep -F 'has become accessible' out || { fail=1; cat out; } -grep '^X$' out || { fail=1; cat out; } -rm -f missing out || framework_failure_ +[ $( wc -l < out ) = 3 ] || { fail=1; cat out; } +grep -F 'cannot open' out || { fail=1; cat out; } +grep -F 'has appeared' out || { fail=1; cat out; } +grep '^X$' out || { fail=1; cat out; } +rm -f missing out || framework_failure_ # === Test: # Ensure that "tail --retry --follow=descriptor" waits for the file to appear.