mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-07-29 03:50:45 +02:00
head: avoid redundant allocations when reading empty files
* src/head.c (elide_tail_lines_file): For seekable empty files, or seekable files where the current offset is after the end of the file, return immediately. Previously the short circuit code could not be reached due to logic error. Spotted by coverity.
This commit is contained in:
+4
-5
@@ -739,18 +739,17 @@ elide_tail_lines_file (const char *filename, int fd, uintmax_t n_elide)
|
||||
|
||||
off_t start_pos = lseek (fd, 0, SEEK_CUR);
|
||||
off_t end_pos = lseek (fd, 0, SEEK_END);
|
||||
if (0 <= start_pos && start_pos < end_pos)
|
||||
if (0 <= start_pos && 0 <= end_pos)
|
||||
{
|
||||
/* If the file is empty, we're done. */
|
||||
if (end_pos == 0)
|
||||
/* If no data to read we're done. */
|
||||
if (start_pos >= end_pos)
|
||||
return true;
|
||||
|
||||
return elide_tail_lines_seekable (filename, fd, n_elide,
|
||||
start_pos, end_pos);
|
||||
}
|
||||
|
||||
/* lseek failed or the end offset precedes start.
|
||||
Fall through. */
|
||||
/* lseek failed, Fall through... */
|
||||
}
|
||||
|
||||
return elide_tail_lines_pipe (filename, fd, n_elide);
|
||||
|
||||
Reference in New Issue
Block a user