]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
maint: adjust lseek_copy to handle non zero offsets
authorPádraig Brady <P@draigBrady.com>
Mon, 3 Nov 2025 22:42:22 +0000 (22:42 +0000)
committerPádraig Brady <P@draigBrady.com>
Tue, 4 Nov 2025 16:32:16 +0000 (16:32 +0000)
* src/copy-file-data.c (lseek_copy): hole_start is initialized
only when ext_start == ipos.
(infer_scantype): Update the hole_start initialization to
the more logically correct POS, even though that init
is only needed to suppress a -Wmaybe-uninitialized warning.
Note gcc 15.2 at least doesn't seem to need that suppression.

src/copy-file-data.c

index 125cf785695019cb7f6e8e23ea213fa9b23eaf14..c88b10cb3850bb97d9fd12e9e9973185265ec1c8 100644 (file)
@@ -338,7 +338,7 @@ lseek_copy (int src_fd, int dest_fd, char **abuf, idx_t buf_size,
   for (off_t ext_start = scan_inference->ext_start;
        0 <= ext_start && ext_start < max_ipos; )
     {
-      off_t ext_end = (ext_start == 0
+      off_t ext_end = (ext_start == ipos
                        ? scan_inference->hole_start
                        : lseek (src_fd, ext_start, SEEK_HOLE));
       if (0 <= ext_end)
@@ -497,7 +497,7 @@ infer_scantype (int fd, struct stat const *sb, off_t pos,
     }
   else if (pos < scan_inference->ext_start || errno == ENXIO)
     {
-      scan_inference->hole_start = 0;  /* Pacify -Wmaybe-uninitialized.  */
+      scan_inference->hole_start = pos;  /* Pacify -Wmaybe-uninitialized.  */
       return LSEEK_SCANTYPE;
     }
   else if (errno != EINVAL && !is_ENOTSUP (errno))