diff options
author | Pádraig Brady <P@draigBrady.com> | 2023-01-30 21:44:10 +0000 |
---|---|---|
committer | Pádraig Brady <P@draigBrady.com> | 2023-02-06 16:18:12 +0000 |
commit | c0c63e9735908a9579f8735001957db6bd81afc3 (patch) | |
tree | 8e526079d53dd9f98965dc0e3a2fef26ea954811 | |
parent | ead07bb3d461389bb52336109be7858458e49c38 (diff) | |
download | coreutils-c0c63e9735908a9579f8735001957db6bd81afc3.tar.gz |
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.
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | src/tail.c | 3 |
2 files changed, 6 insertions, 1 deletions
@@ -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)); } } |