summaryrefslogtreecommitdiff
path: root/libarchive/archive_read_disk_windows.c
diff options
context:
space:
mode:
authorMartin Matuška <martin@matuska.org>2021-11-21 11:32:19 +0100
committerGitHub <noreply@github.com>2021-11-21 11:32:19 +0100
commit4f598ce28aa370e945103eb9a17f03c7c820c1e8 (patch)
treeb236dccabee9d88383dc934e7e719105d84095fe /libarchive/archive_read_disk_windows.c
parent6795d0255584c863d7f5ceb3038e53c9ad3f135a (diff)
parent1833a6c4d40a57f5782ac2f96b375923c51024ea (diff)
downloadlibarchive-4f598ce28aa370e945103eb9a17f03c7c820c1e8.tar.gz
Merge pull request #1614 from diabonas/add-no-read-sparse
Add ARCHIVE_READDISK_NO_SPARSE/--no-read-sparse to improve reproducibility of generated archives
Diffstat (limited to 'libarchive/archive_read_disk_windows.c')
-rw-r--r--libarchive/archive_read_disk_windows.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/libarchive/archive_read_disk_windows.c b/libarchive/archive_read_disk_windows.c
index 4838969d..7e9ea4f0 100644
--- a/libarchive/archive_read_disk_windows.c
+++ b/libarchive/archive_read_disk_windows.c
@@ -1090,9 +1090,11 @@ next_entry(struct archive_read_disk *a, struct tree *t,
}
/* Find sparse data from the disk. */
- if (archive_entry_hardlink(entry) == NULL &&
- (st->dwFileAttributes & FILE_ATTRIBUTE_SPARSE_FILE) != 0)
- r = setup_sparse_from_disk(a, entry, t->entry_fh);
+ if ((a->flags & ARCHIVE_READDISK_NO_SPARSE) == 0) {
+ if (archive_entry_hardlink(entry) == NULL &&
+ (st->dwFileAttributes & FILE_ATTRIBUTE_SPARSE_FILE) != 0)
+ r = setup_sparse_from_disk(a, entry, t->entry_fh);
+ }
}
return (r);
}
@@ -2371,9 +2373,11 @@ archive_read_disk_entry_from_file(struct archive *_a,
return (ARCHIVE_OK);
}
- r = setup_sparse_from_disk(a, entry, h);
- if (fd < 0)
- CloseHandle(h);
+ if ((a->flags & ARCHIVE_READDISK_NO_SPARSE) == 0) {
+ r = setup_sparse_from_disk(a, entry, h);
+ if (fd < 0)
+ CloseHandle(h);
+ }
return (r);
}