[tar] tar: bugfix for creation of --posix --sparse tarballs

Pavel Raiskup praiskup at fedoraproject.org
Fri Mar 1 10:54:34 UTC 2013


commit 87cdd4918ef137c27b1665ef3acfcdb1f8ccad14
Author: Pavel Raiskup <praiskup at redhat.com>
Date:   Fri Mar 1 11:49:55 2013 +0100

    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 deletions(-)
---
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 <bug-tar at gnu.org>
+ 
++** 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 <praiskup at redhat.com> - 2:1.26-19
+- fix creating sparse pax archives containing files of effective
+  size >8GB (#516309)
+
 * Wed Feb 20 2013 Pavel Raiskup <praiskup at redhat.com> - 2:1.26-18
 - fix problems with big uids/gids and pax format (> 2^21) (#913406)
 


More information about the scm-commits mailing list