From: Pádraig Brady
Date: Mon, 3 Nov 2025 22:42:22 +0000 (+0000) Subject: maint: adjust lseek_copy to handle non zero offsets X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4c0cf3864a74b4bbb6c51e7abecddbde5cc6924e;p=thirdparty%2Fcoreutils.git maint: adjust lseek_copy to handle non zero offsets * 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. --- diff --git a/src/copy-file-data.c b/src/copy-file-data.c index 125cf78569..c88b10cb38 100644 --- a/src/copy-file-data.c +++ b/src/copy-file-data.c @@ -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))