From ae5a27b6fd01ccd0816abe0728563531a3f1422c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1draig=20Brady?= Date: Mon, 30 Jan 2023 21:44:10 +0000 Subject: [PATCH 1/2] 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. --- NEWS | 4 ++++ src/tail.c | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index b3cde4a01..6cd9a6198 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 2244509dd..03061e8bf 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)); } } -- 2.26.2