From 87cdd4918ef137c27b1665ef3acfcdb1f8ccad14 Mon Sep 17 00:00:00 2001 From: Pavel Raiskup Date: Fri, 1 Mar 2013 11:49:55 +0100 Subject: [PATCH] tar: bugfix for creation of --posix --sparse tarballs GNU tar failed to create posix archives containing sparse files of effective size (real size stored on the disk) >8GB. Version: 2:1.26-19 Resolves: #516309 --- tar-1.26-pax-big-sparse-files.patch | 66 +++++++++++++++++++++++++++++ tar.spec | 13 +++++- 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 tar-1.26-pax-big-sparse-files.patch diff --git a/tar-1.26-pax-big-sparse-files.patch b/tar-1.26-pax-big-sparse-files.patch new file mode 100644 index 0000000..be72dfa --- /dev/null +++ b/tar-1.26-pax-big-sparse-files.patch @@ -0,0 +1,66 @@ +diff --git a/NEWS b/NEWS +index 8aeae33..8f3c416 100644 +--- a/NEWS ++++ b/NEWS +@@ -1,10 +1,15 @@ + GNU tar NEWS - User visible changes. 2012-11-19 + Please send GNU tar bug reports to + ++** Sparse files with large data ++ ++When creating a PAX-format archive, tar no longer arbitrarily restricts ++the size of the representation of a sparse file to be less than 8 GiB. ++ + + version 1.26 - Sergey Poznyakoff, 2011-03-12 + +-* Bugfixes ++* Bug fixes + + ** Fix the --verify option, which broke in version 1.24. + +diff --git a/src/sparse.c b/src/sparse.c +index 4b2f982..cfd0c66 100644 +--- a/src/sparse.c ++++ b/src/sparse.c +@@ -919,6 +919,18 @@ pax_sparse_member_p (struct tar_sparse_file *file) + || file->stat_info->sparse_major > 0; + } + ++/* Start a header that uses the effective (shrunken) file size. */ ++static union block * ++pax_start_header (struct tar_stat_info *st) ++{ ++ off_t realsize = st->stat.st_size; ++ union block *blk; ++ st->stat.st_size = st->archive_file_size; ++ blk = start_header (st); ++ st->stat.st_size = realsize; ++ return blk; ++} ++ + static bool + pax_dump_header_0 (struct tar_sparse_file *file) + { +@@ -968,9 +980,7 @@ pax_dump_header_0 (struct tar_sparse_file *file) + return false; + } + } +- blk = start_header (file->stat_info); +- /* Store the effective (shrunken) file size */ +- OFF_TO_CHARS (file->stat_info->archive_file_size, blk->header.size); ++ blk = pax_start_header (file->stat_info); + finish_header (file->stat_info, blk, block_ordinal); + if (save_file_name) + { +@@ -1035,9 +1045,7 @@ pax_dump_header_1 (struct tar_sparse_file *file) + if (strlen (file->stat_info->file_name) > NAME_FIELD_SIZE) + file->stat_info->file_name[NAME_FIELD_SIZE] = 0; + +- blk = start_header (file->stat_info); +- /* Store the effective (shrunken) file size */ +- OFF_TO_CHARS (file->stat_info->archive_file_size, blk->header.size); ++ blk = pax_start_header (file->stat_info); + finish_header (file->stat_info, blk, block_ordinal); + free (file->stat_info->file_name); + file->stat_info->file_name = save_file_name; diff --git a/tar.spec b/tar.spec index 6ed40ef..f4142d6 100644 --- a/tar.spec +++ b/tar.spec @@ -5,7 +5,7 @@ Summary: A GNU file archiving program Name: tar Epoch: 2 Version: 1.26 -Release: 18%{?dist} +Release: 19%{?dist} License: GPLv3+ Group: Applications/Archiving URL: http://www.gnu.org/software/tar/ @@ -76,6 +76,12 @@ Patch10: tar-1.26-xattrs.patch # ~> upstream (it is part of df7b55a8f6354e) Patch11: tar-1.26-posix-biguid.patch +# Allow store sparse files of effective size >8GB into pax archives +# ~> #516309 +# ~> http://lists.gnu.org/archive/html/bug-tar/2013-01/msg00001.html +# ~> already upstream (2f6c03cba) +Patch12: tar-1.26-pax-big-sparse-files.patch + # run "make check" by default %bcond_without check @@ -118,6 +124,7 @@ the rmt package. %patch9 -p1 -b .selinux-gnulib-prep %patch10 -p1 -b .xattrs-selinux-acls %patch11 -p1 -b .big_uid_gid +%patch12 -p1 -b .pax-sparse-big-files autoreconf -v @@ -180,6 +187,10 @@ fi %{_infodir}/tar.info* %changelog +* Fri Mar 01 2013 Pavel Raiskup - 2:1.26-19 +- fix creating sparse pax archives containing files of effective + size >8GB (#516309) + * Wed Feb 20 2013 Pavel Raiskup - 2:1.26-18 - fix problems with big uids/gids and pax format (> 2^21) (#913406)