diff options
author | Roman Donchenko <roman.donchenko@itseez.com> | 2015-07-06 14:54:19 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2015-07-06 19:01:08 (GMT) |
commit | edae40239e64f8ea6c03d28601c9e7403a354f65 (patch) | |
tree | 10ff0ca8f2407379c7cde70e9c59203e7329f188 /Source | |
parent | 7e86f567aca6b913689dc2d8c17a17936284b811 (diff) | |
download | CMake-edae40239e64f8ea6c03d28601c9e7403a354f65.zip CMake-edae40239e64f8ea6c03d28601c9e7403a354f65.tar.gz CMake-edae40239e64f8ea6c03d28601c9e7403a354f65.tar.bz2 |
cmArchiveWrite: do not store sparse files when using standard tar formats
Sparse files in tars are a GNU extension that libarchive will use if it
detects holes in the input file, even when using the standard pax/paxr
formats. Not all tar implementations can handle sparse files; in particular,
the internal implementation dpkg uses to extract packages can't. To
maximize archive portability, turn this feature off by clearing the
sparseness information from archive entries.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmArchiveWrite.cxx | 11 | ||||
-rw-r--r-- | Source/cmArchiveWrite.h | 1 |
2 files changed, 11 insertions, 1 deletions
diff --git a/Source/cmArchiveWrite.cxx b/Source/cmArchiveWrite.cxx index 72818f5..44d0d4e 100644 --- a/Source/cmArchiveWrite.cxx +++ b/Source/cmArchiveWrite.cxx @@ -84,7 +84,8 @@ cmArchiveWrite::cmArchiveWrite( Stream(os), Archive(archive_write_new()), Disk(archive_read_disk_new()), - Verbose(false) + Verbose(false), + Format(format) { switch (c) { @@ -282,6 +283,14 @@ bool cmArchiveWrite::AddFile(const char* file, archive_entry_acl_clear(e); archive_entry_xattr_clear(e); archive_entry_set_fflags(e, 0, 0); + + if (this->Format == "pax" || this->Format == "paxr") + { + // Sparse files are a GNU tar extension. + // Do not use them in standard tar files. + archive_entry_sparse_clear(e); + } + if(archive_write_header(this->Archive, e) != ARCHIVE_OK) { this->Error = "archive_write_header: "; diff --git a/Source/cmArchiveWrite.h b/Source/cmArchiveWrite.h index 794cb28..e6f515d 100644 --- a/Source/cmArchiveWrite.h +++ b/Source/cmArchiveWrite.h @@ -84,6 +84,7 @@ private: struct archive* Archive; struct archive* Disk; bool Verbose; + std::string Format; std::string Error; std::string MTime; }; |