From: Pádraig Brady
Date: Mon, 30 Jan 2023 21:44:10 +0000 (+0000) Subject: tail: fix support for -F with non seekable files X-Git-Tag: v9.2~64 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c0c63e9735908a9579f8735001957db6bd81afc3;p=thirdparty%2Fcoreutils.git tail: fix support for -F with non seekable files This was seen to be an issue when following a symlink that was being updated to point to different underlying devices. * src/tail.c (recheck): Guard the lseek() call to only be performed for regular files. * NEWS: Mention the bug fix. --- diff --git a/NEWS b/NEWS index 27334a595c..eb8380e117 100644 --- a/NEWS +++ b/NEWS @@ -52,6 +52,10 @@ GNU coreutils NEWS -*- outline -*- Previously it may have output 1 character too wide for certain widths. [bug introduced in coreutils-5.3] + tail --follow=name works again with non seekable files. Previously it + exited with an "Illegal seek" error when such a file was replaced. + [bug introduced in fileutils-4.1.6] + `wc -c` will again efficiently determine the size of large files on all systems. It no longer redundantly reads data from certain sized files larger than SIZE_MAX. diff --git a/src/tail.c b/src/tail.c index 2244509dd7..03061e8bf7 100644 --- a/src/tail.c +++ b/src/tail.c @@ -1122,7 +1122,8 @@ recheck (struct File_spec *f, bool blocking) { /* Start at the beginning of the file. */ record_open_fd (f, fd, 0, &new_stats, (is_stdin ? -1 : blocking)); - xlseek (fd, 0, SEEK_SET, pretty_name (f)); + if (S_ISREG (new_stats.st_mode)) + xlseek (fd, 0, SEEK_SET, pretty_name (f)); } }