]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
head: avoid redundant allocations when reading empty files
authorPádraig Brady <P@draigBrady.com>
Tue, 9 Jul 2013 17:45:34 +0000 (18:45 +0100)
committerPádraig Brady <P@draigBrady.com>
Thu, 11 Jul 2013 23:25:42 +0000 (00:25 +0100)
* 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.

src/head.c

index 00e1be17c290de2a1d587b22a8fa7dfcb1372fb1..5411a3c0e036654e8fb3ee11b2eb763bffee64d6 100644 (file)
@@ -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);