new upstream release 1.24, use .xz archive (still needs some improvement in xattrs patch)
This commit is contained in:
parent
463fa8a6e3
commit
9934f5707a
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,2 +1,4 @@
|
||||
tar-1.23.tar.bz2
|
||||
tar-1.23.tar.bz2.sig
|
||||
/tar-1.24.tar.xz
|
||||
/tar-1.24.tar.xz.sig
|
||||
|
4
sources
4
sources
@ -1,2 +1,2 @@
|
||||
41e2ca4b924ec7860e51b43ad06cdb7e tar-1.23.tar.bz2
|
||||
d7a3e49d66c50a046c536b987f25e891 tar-1.23.tar.bz2.sig
|
||||
debae443de7e1c61cd24c2d53bca50c6 tar-1.24.tar.xz
|
||||
c4beee21bbab83cd022093825371eed5 tar-1.24.tar.xz.sig
|
||||
|
@ -15,7 +15,7 @@ diff -ruNp tar-1.22.orig/src/list.c tar-1.22/src/list.c
|
||||
+
|
||||
char buf[UINTMAX_STRSIZE_BOUND];
|
||||
|
||||
status = read_header (¤t_header, ¤t_stat_info,
|
||||
status = read_header (¤t_header, ¤t_stat_info,
|
||||
@@ -147,6 +155,9 @@ read_and (void (*do_something) (void))
|
||||
WARNOPT (WARN_ALONE_ZERO_BLOCK,
|
||||
(0, 0, _("A lone zero block at %s"),
|
||||
|
@ -61,7 +61,7 @@
|
||||
--- tar-1.17/src/names.c.wildcards 2007-04-03 14:17:13.000000000 +0200
|
||||
+++ tar-1.17/src/names.c 2007-06-28 13:30:48.000000000 +0200
|
||||
@@ -812,10 +812,7 @@ collect_and_sort_names (void)
|
||||
{
|
||||
|
||||
if (name->found_count || name->directory)
|
||||
continue;
|
||||
- if (name->matching_flags & EXCLUDE_WILDCARDS)
|
||||
|
@ -5,8 +5,8 @@ diff -urNp tar-1.22-orig/src/create.c tar-1.22/src/create.c
|
||||
set_exit_status (TAREXIT_DIFFERS);
|
||||
}
|
||||
else if (atime_preserve_option == replace_atime_preserve
|
||||
- && set_file_atime (fd, p, restore_times) != 0)
|
||||
+ && set_file_atime (fd, p, restore_times) != 0
|
||||
- && set_file_atime (fd, parentfd, name, st->atime) != 0)
|
||||
+ && set_file_atime (fd, parentfd, name, st->atime) != 0
|
||||
+ && errno != EROFS )
|
||||
utime_error (p);
|
||||
}
|
||||
|
@ -1,18 +0,0 @@
|
||||
diff --git a/src/incremen.c b/src/incremen.c
|
||||
index dc880cd..3da1349 100644
|
||||
--- a/src/incremen.c
|
||||
+++ b/src/incremen.c
|
||||
@@ -894,8 +894,11 @@ append_incremental_renames (struct directory *dir)
|
||||
if (obstack_object_size (&stk) != size)
|
||||
{
|
||||
obstack_1grow (&stk, 0);
|
||||
- dumpdir_free (dir->dump);
|
||||
- dir->dump = dumpdir_create (obstack_finish (&stk));
|
||||
+ if (dir)
|
||||
+ {
|
||||
+ dumpdir_free (dir->dump);
|
||||
+ dir->dump = dumpdir_create (obstack_finish (&stk));
|
||||
+ }
|
||||
}
|
||||
obstack_free (&stk, NULL);
|
||||
}
|
@ -1,142 +0,0 @@
|
||||
src/compare.c | 1 -
|
||||
src/extract.c | 2 +-
|
||||
src/list.c | 7 ++-----
|
||||
tests/Makefile.am | 1 +
|
||||
tests/exclude06.at | 47 +++++++++++++++++++++++++++++++++++++++++++++++
|
||||
tests/testsuite.at | 1 +
|
||||
6 files changed, 52 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/compare.c b/src/compare.c
|
||||
index f4e92da..437ffb3 100644
|
||||
--- a/src/compare.c
|
||||
+++ b/src/compare.c
|
||||
@@ -452,7 +452,6 @@ diff_archive (void)
|
||||
{
|
||||
|
||||
set_next_block_after (current_header);
|
||||
- decode_header (current_header, ¤t_stat_info, ¤t_format, 1);
|
||||
|
||||
/* Print the block from current_header and current_stat_info. */
|
||||
|
||||
diff --git a/src/extract.c b/src/extract.c
|
||||
index 947e3ed..71f4e4f 100644
|
||||
--- a/src/extract.c
|
||||
+++ b/src/extract.c
|
||||
@@ -1349,7 +1349,7 @@ extract_archive (void)
|
||||
priv_set_remove_linkdir ();
|
||||
|
||||
set_next_block_after (current_header);
|
||||
- decode_header (current_header, ¤t_stat_info, ¤t_format, 1);
|
||||
+
|
||||
if (!current_stat_info.file_name[0]
|
||||
|| (interactive_option
|
||||
&& !confirm ("extract", current_stat_info.file_name)))
|
||||
diff --git a/src/list.c b/src/list.c
|
||||
index 6e1971f..1edd504 100644
|
||||
--- a/src/list.c
|
||||
+++ b/src/list.c
|
||||
@@ -90,7 +90,8 @@ read_and (void (*do_something) (void))
|
||||
|
||||
/* Valid header. We should decode next field (mode) first.
|
||||
Ensure incoming names are null terminated. */
|
||||
-
|
||||
+ decode_header (current_header, ¤t_stat_info,
|
||||
+ ¤t_format, 1);
|
||||
if (! name_match (current_stat_info.file_name)
|
||||
|| (NEWER_OPTION_INITIALIZED (newer_mtime_option)
|
||||
/* FIXME: We get mtime now, and again later; this causes
|
||||
@@ -116,8 +117,6 @@ read_and (void (*do_something) (void))
|
||||
quotearg_colon (current_stat_info.file_name)));
|
||||
/* Fall through. */
|
||||
default:
|
||||
- decode_header (current_header,
|
||||
- ¤t_stat_info, ¤t_format, 0);
|
||||
skip_member ();
|
||||
continue;
|
||||
}
|
||||
@@ -221,8 +220,6 @@ list_archive (void)
|
||||
off_t block_ordinal = current_block_ordinal ();
|
||||
|
||||
/* Print the header block. */
|
||||
-
|
||||
- decode_header (current_header, ¤t_stat_info, ¤t_format, 0);
|
||||
if (verbose_option)
|
||||
print_header (¤t_stat_info, current_header, block_ordinal);
|
||||
|
||||
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
||||
index e9b753c..fe2535a 100644
|
||||
--- a/tests/Makefile.am
|
||||
+++ b/tests/Makefile.am
|
||||
@@ -66,6 +66,7 @@ TESTSUITE_AT = \
|
||||
exclude03.at\
|
||||
exclude04.at\
|
||||
exclude05.at\
|
||||
+ exclude06.at\
|
||||
extrac01.at\
|
||||
extrac02.at\
|
||||
extrac03.at\
|
||||
diff --git a/tests/exclude06.at b/tests/exclude06.at
|
||||
new file mode 100644
|
||||
index 0000000..f7ab141
|
||||
--- /dev/null
|
||||
+++ b/tests/exclude06.at
|
||||
@@ -0,0 +1,47 @@
|
||||
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
|
||||
+# Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
+
|
||||
+# This program is free software; you can redistribute it and/or modify
|
||||
+# it under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation; either version 3, or (at your option)
|
||||
+# any later version.
|
||||
+
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+# Tar 1.23 would fail to exclude names longer that 100 characters from
|
||||
+# pax format archives.
|
||||
+#
|
||||
+# Reported-by: Matthew Peterson <mrpeterson2@gmail.com>
|
||||
+# References: <AANLkTin0teb1dcl0HCNquHxvN4HQnJmP6aK7CJCqy0sd@mail.gmail.com>
|
||||
+# http://lists.gnu.org/archive/html/help-tar/2010-06/msg00000.html
|
||||
+
|
||||
+AT_SETUP([exclude: long files in pax archives])
|
||||
+AT_KEYWORDS([exclude exclude06])
|
||||
+
|
||||
+m4_define([test_base_dir],[one/two/three/four/five/six/seven/eight/nine/ten/eleven/twelve/thirteen/fourteen/fifteen/sixteen/seventeen])
|
||||
+
|
||||
+AT_TAR_CHECK([
|
||||
+AT_TAR_MKHIER(test_base_dir)
|
||||
+genfile --length 20 -f test_base_dir[/1.txt]
|
||||
+genfile --length 20 -f test_base_dir[/1.c]
|
||||
+
|
||||
+tar cf archive.tar test_base_dir
|
||||
+mkdir out
|
||||
+tar -C out -xf archive.tar --exclude='*.txt'
|
||||
+find out -type f
|
||||
+],
|
||||
+[0],
|
||||
+[[out/]test_base_dir[/1.c]
|
||||
+],
|
||||
+[],
|
||||
+[],
|
||||
+[],
|
||||
+[pax])
|
||||
+
|
||||
+AT_CLEANUP
|
||||
diff --git a/tests/testsuite.at b/tests/testsuite.at
|
||||
index f581071..ef70b99 100644
|
||||
--- a/tests/testsuite.at
|
||||
+++ b/tests/testsuite.at
|
||||
@@ -130,6 +130,7 @@ m4_include([exclude02.at])
|
||||
m4_include([exclude03.at])
|
||||
m4_include([exclude04.at])
|
||||
m4_include([exclude05.at])
|
||||
+m4_include([exclude06.at])
|
||||
|
||||
m4_include([delete01.at])
|
||||
m4_include([delete02.at])
|
@ -9,15 +9,6 @@ diff -urNp tar-1.23-orig/src/tar.c tar-1.23/src/tar.c
|
||||
+ case OLD_ARCHIVE_OPTION:
|
||||
+ set_archive_format ("v7");
|
||||
+ break;
|
||||
|
||||
|
||||
case OVERWRITE_DIR_OPTION:
|
||||
old_files_option = DEFAULT_OLD_FILES;
|
||||
@@ -1955,7 +1959,7 @@ parse_opt (int key, char *arg, struct ar
|
||||
case POSIX_OPTION:
|
||||
set_archive_format ("posix");
|
||||
break;
|
||||
-
|
||||
+
|
||||
case PRESERVE_OPTION:
|
||||
/* FIXME: What it is good for? */
|
||||
same_permissions_option = true;
|
||||
|
@ -31,7 +31,7 @@ index 4cadab9..3a36b9b 100644
|
||||
+void transform_name_from_header(union block *header, struct tar_stat_info *);
|
||||
char const *tartime (struct timespec t, bool full_time);
|
||||
|
||||
#define GID_FROM_HEADER(where) gid_from_header (where, sizeof (where))
|
||||
#define OFF_FROM_HEADER(where) off_from_header (where, sizeof (where))
|
||||
diff --git a/src/list.c b/src/list.c
|
||||
index 1edd504..4e0e1a0 100644
|
||||
--- a/src/list.c
|
||||
@ -66,11 +66,11 @@ index 1edd504..4e0e1a0 100644
|
||||
switch (current_header->header.typeflag)
|
||||
{
|
||||
@@ -659,7 +663,11 @@ decode_header (union block *header, struct tar_stat_info *stat_info,
|
||||
|| stat_info->dumpdir)
|
||||
stat_info->is_dumpdir = true;
|
||||
}
|
||||
if (header->header.typeflag == GNUTYPE_VOLHDR)
|
||||
/* Name transformations don't apply to volume headers. */
|
||||
return;
|
||||
+}
|
||||
|
||||
|
||||
+void
|
||||
+transform_name_from_header(union block *header, struct tar_stat_info *stat_info)
|
||||
+{
|
||||
@ -86,7 +86,7 @@ index 1edd504..4e0e1a0 100644
|
||||
simple_print_header (&vstat, &vblk, 0);
|
||||
tar_stat_destroy (&vstat);
|
||||
@@ -1431,6 +1440,7 @@ test_archive_label ()
|
||||
|
||||
{
|
||||
decode_header (current_header,
|
||||
¤t_stat_info, ¤t_format, 0);
|
||||
+ transform_name_from_header (current_header, ¤t_stat_info);
|
||||
@ -177,3 +177,15 @@ index ef70b99..8b533ed 100644
|
||||
|
||||
m4_include([delete01.at])
|
||||
m4_include([delete02.at])
|
||||
diff -urNp tar-1.24-orig/tests/xform01.at tar-1.24/tests/xform01.at
|
||||
--- tar-1.24-orig/tests/xform01.at 2010-10-24 20:07:47.000000000 +0200
|
||||
+++ tar-1.24/tests/xform01.at 2010-10-25 15:49:42.866904079 +0200
|
||||
@@ -29,7 +29,7 @@ AT_KEYWORDS([transform xform xform01 vol
|
||||
AT_TAR_CHECK([
|
||||
genfile --file file
|
||||
tar -cf archive.tar -V /label/ file
|
||||
-tar tf archive.tar
|
||||
+tar Ptf archive.tar
|
||||
],
|
||||
[0],
|
||||
[/label/
|
||||
|
98
tar-1.24-extractingdirs.patch
Normal file
98
tar-1.24-extractingdirs.patch
Normal file
@ -0,0 +1,98 @@
|
||||
tar: fix bug with -C and extracting directories
|
||||
|
||||
Problem reported by Denis Excoffier in
|
||||
<http://lists.gnu.org/archive/html/bug-tar/2010-10/msg00034.html>.
|
||||
|
||||
* src/extract.c (extract_dir): Use mkdirat, not mkdir.
|
||||
* tests/extrac16.at: New file, to test for this bug.
|
||||
* tests/Makefile.am (TESTSUITE_AT): Add it.
|
||||
* tests/testsuite.at: Include it.
|
||||
---
|
||||
src/extract.c | 2 +-
|
||||
tests/Makefile.am | 1 +
|
||||
tests/extrac16.at | 36 ++++++++++++++++++++++++++++++++++++
|
||||
tests/testsuite.at | 1 +
|
||||
4 files changed, 39 insertions(+), 1 deletions(-)
|
||||
create mode 100644 tests/extrac16.at
|
||||
|
||||
diff --git a/src/extract.c b/src/extract.c
|
||||
index 0d23d4a..98236ac 100644
|
||||
--- a/src/extract.c
|
||||
+++ b/src/extract.c
|
||||
@@ -777,7 +777,7 @@ extract_dir (char *file_name, int typeflag)
|
||||
|
||||
for (;;)
|
||||
{
|
||||
- status = mkdir (file_name, mode);
|
||||
+ status = mkdirat (chdir_fd, file_name, mode);
|
||||
if (status == 0)
|
||||
{
|
||||
current_mode = mode & ~ current_umask;
|
||||
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
||||
index d29563a..b71e83c 100644
|
||||
--- a/tests/Makefile.am
|
||||
+++ b/tests/Makefile.am
|
||||
@@ -82,6 +82,7 @@ TESTSUITE_AT = \
|
||||
extrac13.at\
|
||||
extrac14.at\
|
||||
extrac15.at\
|
||||
+ extrac16.at\
|
||||
filerem01.at\
|
||||
filerem02.at\
|
||||
gzip.at\
|
||||
diff --git a/tests/extrac16.at b/tests/extrac16.at
|
||||
new file mode 100644
|
||||
index 0000000..625e579
|
||||
--- /dev/null
|
||||
+++ b/tests/extrac16.at
|
||||
@@ -0,0 +1,36 @@
|
||||
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
|
||||
+
|
||||
+# Test suite for GNU tar.
|
||||
+# Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
+
|
||||
+# This program is free software; you can redistribute it and/or modify
|
||||
+# it under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation; either version 3, or (at your option)
|
||||
+# any later version.
|
||||
+
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+# written by Paul Eggert from a bug report by Denis Excoffier
|
||||
+# <http://lists.gnu.org/archive/html/bug-tar/2010-10/msg00034.html>
|
||||
+
|
||||
+# Check extraction of empty directory with -C.
|
||||
+
|
||||
+AT_SETUP([extract empty directory with -C])
|
||||
+AT_KEYWORDS([extract extrac16])
|
||||
+
|
||||
+AT_TAR_CHECK([
|
||||
+mkdir src src/a src/a/b dest
|
||||
+touch src/a/c
|
||||
+
|
||||
+tar -cf archive.tar -C src a &&
|
||||
+tar -xf archive.tar -C dest
|
||||
+],
|
||||
+[0],[],[],[],[],[gnu])
|
||||
+
|
||||
+AT_CLEANUP
|
||||
diff --git a/tests/testsuite.at b/tests/testsuite.at
|
||||
index c386892..40f0e41 100644
|
||||
--- a/tests/testsuite.at
|
||||
+++ b/tests/testsuite.at
|
||||
@@ -154,6 +154,7 @@ m4_include([extrac12.at])
|
||||
m4_include([extrac13.at])
|
||||
m4_include([extrac14.at])
|
||||
m4_include([extrac15.at])
|
||||
+m4_include([extrac16.at])
|
||||
|
||||
m4_include([label01.at])
|
||||
m4_include([label02.at])
|
||||
--
|
||||
1.7.2
|
@ -1,8 +1,8 @@
|
||||
diff -urNp tar-1.23-orig/configure.ac tar-1.23/configure.ac
|
||||
--- tar-1.23-orig/configure.ac 2010-03-10 11:47:54.000000000 +0100
|
||||
+++ tar-1.23/configure.ac 2010-08-16 14:32:11.448178888 +0200
|
||||
diff -urNp tar-1.24-orig/configure.ac tar-1.24/configure.ac
|
||||
--- tar-1.24-orig/configure.ac 2010-10-24 23:35:35.000000000 +0200
|
||||
+++ tar-1.24/configure.ac 2010-10-25 10:24:52.548214037 +0200
|
||||
@@ -44,7 +44,7 @@ AC_CHECK_HEADERS_ONCE(fcntl.h linux/fd.h
|
||||
sys/param.h sys/device.h sys/filio.h sys/gentape.h \
|
||||
sys/param.h sys/device.h sys/gentape.h \
|
||||
sys/inet.h sys/io/trioctl.h \
|
||||
sys/mtio.h sys/time.h sys/tprintf.h sys/tape.h \
|
||||
- unistd.h locale.h)
|
||||
@ -13,7 +13,7 @@ diff -urNp tar-1.23-orig/configure.ac tar-1.23/configure.ac
|
||||
@@ -91,6 +91,12 @@ gl_INIT
|
||||
tar_PAXUTILS
|
||||
|
||||
AC_CHECK_FUNCS(fsync getdtablesize lstat mkfifo readlink symlink setlocale utimes)
|
||||
AC_CHECK_FUNCS_ONCE([fchmod fchown fsync lstat mkfifo readlink symlink])
|
||||
+AC_CHECK_FUNCS(getxattr fgetxattr lgetxattr \
|
||||
+ setxattr fsetxattr lsetxattr \
|
||||
+ listxattr flistxattr llistxattr,
|
||||
@ -49,10 +49,10 @@ diff -urNp tar-1.23-orig/configure.ac tar-1.23/configure.ac
|
||||
# Gettext.
|
||||
AM_GNU_GETTEXT([external], [need-formatstring-macros])
|
||||
AM_GNU_GETTEXT_VERSION([0.16])
|
||||
diff -urNp tar-1.23-orig/doc/tar.texi tar-1.23/doc/tar.texi
|
||||
--- tar-1.23-orig/doc/tar.texi 2010-08-16 14:29:00.421912230 +0200
|
||||
+++ tar-1.23/doc/tar.texi 2010-08-16 14:32:11.459923196 +0200
|
||||
@@ -2364,6 +2364,10 @@ Normally when creating an archive, @comm
|
||||
diff -urNp tar-1.24-orig/doc/tar.texi tar-1.24/doc/tar.texi
|
||||
--- tar-1.24-orig/doc/tar.texi 2010-10-24 20:07:54.000000000 +0200
|
||||
+++ tar-1.24/doc/tar.texi 2010-10-25 10:24:52.554213688 +0200
|
||||
@@ -2370,6 +2370,10 @@ Normally when creating an archive, @comm
|
||||
@samp{/} from member names. This option disables that behavior.
|
||||
@xref{absolute}.
|
||||
|
||||
@ -63,7 +63,7 @@ diff -urNp tar-1.23-orig/doc/tar.texi tar-1.23/doc/tar.texi
|
||||
@opsummary{after-date}
|
||||
@item --after-date
|
||||
|
||||
@@ -2885,6 +2889,10 @@ contents have changed (as opposed to jus
|
||||
@@ -2915,6 +2919,10 @@ contents have changed (as opposed to jus
|
||||
also back up files for which any status information has
|
||||
changed). @xref{after}.
|
||||
|
||||
@ -74,7 +74,7 @@ diff -urNp tar-1.23-orig/doc/tar.texi tar-1.23/doc/tar.texi
|
||||
@opsummary{no-anchored}
|
||||
@item --no-anchored
|
||||
An exclude pattern can match any subsequence of the name's components.
|
||||
@@ -2968,11 +2976,21 @@ locations. Usually @command{tar} determ
|
||||
@@ -2998,11 +3006,21 @@ locations. Usually @command{tar} determ
|
||||
the archive can be seeked or not. Use this option to disable this
|
||||
mechanism.
|
||||
|
||||
@ -96,7 +96,7 @@ diff -urNp tar-1.23-orig/doc/tar.texi tar-1.23/doc/tar.texi
|
||||
@opsummary{no-wildcards}
|
||||
@item --no-wildcards
|
||||
Do not use wildcards.
|
||||
@@ -3202,6 +3220,11 @@ in cases when such recognition fails. I
|
||||
@@ -3235,6 +3253,11 @@ in cases when such recognition fails. I
|
||||
archive is open for reading (e.g. with @option{--list} or
|
||||
@option{--extract} options).
|
||||
|
||||
@ -108,7 +108,7 @@ diff -urNp tar-1.23-orig/doc/tar.texi tar-1.23/doc/tar.texi
|
||||
@opsummary{show-defaults}
|
||||
@item --show-defaults
|
||||
|
||||
@@ -3411,6 +3434,11 @@ Enable or disable warning messages ident
|
||||
@@ -3448,6 +3471,11 @@ Enable or disable warning messages ident
|
||||
messages are suppressed if @var{keyword} is prefixed with @samp{no-}.
|
||||
@xref{warnings}.
|
||||
|
||||
@ -120,7 +120,7 @@ diff -urNp tar-1.23-orig/doc/tar.texi tar-1.23/doc/tar.texi
|
||||
@opsummary{wildcards}
|
||||
@item --wildcards
|
||||
Use wildcards when matching member names with patterns.
|
||||
@@ -8599,6 +8627,8 @@ implementation able to read @samp{ustar}
|
||||
@@ -8643,6 +8671,8 @@ implementation able to read @samp{ustar}
|
||||
most @samp{posix} archives as well, with the only exception that any
|
||||
additional information (such as long file names etc.) will in such
|
||||
case be extracted as plain text files along with the files it refers to.
|
||||
@ -129,7 +129,7 @@ diff -urNp tar-1.23-orig/doc/tar.texi tar-1.23/doc/tar.texi
|
||||
|
||||
This archive format will be the default format for future versions
|
||||
of @GNUTAR{}.
|
||||
@@ -9160,6 +9190,51 @@ Same as both @option{--same-permissions}
|
||||
@@ -9259,6 +9289,51 @@ Same as both @option{--same-permissions}
|
||||
|
||||
This option is deprecated, and will be removed in @GNUTAR{} version 1.23.
|
||||
|
||||
@ -181,10 +181,10 @@ diff -urNp tar-1.23-orig/doc/tar.texi tar-1.23/doc/tar.texi
|
||||
@end table
|
||||
|
||||
@node Portability
|
||||
diff -urNp tar-1.23-orig/src/common.h tar-1.23/src/common.h
|
||||
--- tar-1.23-orig/src/common.h 2010-01-26 13:21:18.000000000 +0100
|
||||
+++ tar-1.23/src/common.h 2010-08-16 14:32:11.464922567 +0200
|
||||
@@ -251,6 +251,15 @@ GLOBAL int same_owner_option;
|
||||
diff -urNp tar-1.24-orig/src/common.h tar-1.24/src/common.h
|
||||
--- tar-1.24-orig/src/common.h 2010-10-24 20:07:54.000000000 +0200
|
||||
+++ tar-1.24/src/common.h 2010-10-25 10:24:52.558475456 +0200
|
||||
@@ -253,6 +253,15 @@ GLOBAL int same_owner_option;
|
||||
/* If positive, preserve permissions when extracting. */
|
||||
GLOBAL int same_permissions_option;
|
||||
|
||||
@ -200,7 +200,7 @@ diff -urNp tar-1.23-orig/src/common.h tar-1.23/src/common.h
|
||||
/* When set, strip the given number of file name components from the file name
|
||||
before extracting */
|
||||
GLOBAL size_t strip_name_components;
|
||||
@@ -732,6 +741,9 @@ extern char *output_start;
|
||||
@@ -706,6 +715,9 @@ extern char *output_start;
|
||||
|
||||
void update_archive (void);
|
||||
|
||||
@ -209,8 +209,8 @@ diff -urNp tar-1.23-orig/src/common.h tar-1.23/src/common.h
|
||||
+
|
||||
/* Module xheader.c. */
|
||||
|
||||
void xheader_init (struct xheader *xhdr);
|
||||
@@ -753,6 +765,12 @@ bool xheader_string_end (struct xheader
|
||||
void xheader_decode (struct tar_stat_info *stat);
|
||||
@@ -726,6 +738,12 @@ bool xheader_string_end (struct xheader
|
||||
bool xheader_keyword_deleted_p (const char *kw);
|
||||
char *xheader_format_name (struct tar_stat_info *st, const char *fmt,
|
||||
size_t n);
|
||||
@ -223,9 +223,9 @@ diff -urNp tar-1.23-orig/src/common.h tar-1.23/src/common.h
|
||||
|
||||
/* Module system.c */
|
||||
|
||||
diff -urNp tar-1.23-orig/src/create.c tar-1.23/src/create.c
|
||||
--- tar-1.23-orig/src/create.c 2010-08-16 14:29:00.431912370 +0200
|
||||
+++ tar-1.23/src/create.c 2010-08-16 14:32:11.465912091 +0200
|
||||
diff -urNp tar-1.24-orig/src/create.c tar-1.24/src/create.c
|
||||
--- tar-1.24-orig/src/create.c 2010-10-24 20:07:54.000000000 +0200
|
||||
+++ tar-1.24/src/create.c 2010-10-25 10:24:52.560213618 +0200
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <quotearg.h>
|
||||
|
||||
@ -233,8 +233,8 @@ diff -urNp tar-1.23-orig/src/create.c tar-1.23/src/create.c
|
||||
+
|
||||
#include <hash.h>
|
||||
|
||||
struct link
|
||||
@@ -954,6 +955,30 @@ start_header (struct tar_stat_info *st)
|
||||
/* Error number to use when an impostor is discovered.
|
||||
@@ -934,6 +935,30 @@ start_header (struct tar_stat_info *st)
|
||||
GNAME_TO_CHARS (st->gname, header->header.gname);
|
||||
}
|
||||
|
||||
@ -265,9 +265,9 @@ diff -urNp tar-1.23-orig/src/create.c tar-1.23/src/create.c
|
||||
return header;
|
||||
}
|
||||
|
||||
@@ -1587,6 +1612,10 @@ dump_file0 (struct tar_stat_info *st, co
|
||||
}
|
||||
}
|
||||
@@ -1709,6 +1734,10 @@ dump_file0 (struct tar_stat_info *st, ch
|
||||
bool ok;
|
||||
struct stat final_stat;
|
||||
|
||||
+ xattrs_acls_get(st, p, fd, !is_dir);
|
||||
+ xattrs_selinux_get(st, p, fd);
|
||||
@ -276,7 +276,7 @@ diff -urNp tar-1.23-orig/src/create.c tar-1.23/src/create.c
|
||||
if (is_dir)
|
||||
{
|
||||
const char *tag_file_name;
|
||||
@@ -1710,6 +1739,9 @@ dump_file0 (struct tar_stat_info *st, co
|
||||
@@ -1826,6 +1855,9 @@ dump_file0 (struct tar_stat_info *st, ch
|
||||
if (NAME_FIELD_SIZE - (archive_format == OLDGNU_FORMAT) < size)
|
||||
write_long_link (st);
|
||||
|
||||
@ -286,7 +286,7 @@ diff -urNp tar-1.23-orig/src/create.c tar-1.23/src/create.c
|
||||
block_ordinal = current_block_ordinal ();
|
||||
st->stat.st_size = 0; /* force 0 size on symlink */
|
||||
header = start_header (st);
|
||||
@@ -1728,11 +1760,23 @@ dump_file0 (struct tar_stat_info *st, co
|
||||
@@ -1844,11 +1876,23 @@ dump_file0 (struct tar_stat_info *st, ch
|
||||
}
|
||||
#endif
|
||||
else if (S_ISCHR (st->stat.st_mode))
|
||||
@ -313,13 +313,14 @@ diff -urNp tar-1.23-orig/src/create.c tar-1.23/src/create.c
|
||||
else if (S_ISSOCK (st->stat.st_mode))
|
||||
{
|
||||
WARNOPT (WARN_FILE_IGNORED,
|
||||
diff -urNp tar-1.23-orig/src/extract.c tar-1.23/src/extract.c
|
||||
--- tar-1.23-orig/src/extract.c 2010-01-26 12:28:09.000000000 +0100
|
||||
+++ tar-1.23/src/extract.c 2010-08-16 14:32:11.467922288 +0200
|
||||
@@ -70,6 +70,13 @@ struct delayed_set_stat
|
||||
mode_t invert_permissions;
|
||||
enum permstatus permstatus;
|
||||
bool after_links;
|
||||
diff -urNp tar-1.24-orig/src/extract.c tar-1.24/src/extract.c
|
||||
--- tar-1.24-orig/src/extract.c 2010-10-24 20:07:54.000000000 +0200
|
||||
+++ tar-1.24/src/extract.c 2010-10-25 10:35:10.903214037 +0200
|
||||
@@ -97,6 +97,14 @@ struct delayed_set_stat
|
||||
/* Directory that the name is relative to. */
|
||||
int change_dir;
|
||||
|
||||
+ /* extended attributes*/
|
||||
+ char *cntx_name;
|
||||
+ char *acls_a_ptr;
|
||||
+ size_t acls_a_len;
|
||||
@ -327,10 +328,10 @@ diff -urNp tar-1.23-orig/src/extract.c tar-1.23/src/extract.c
|
||||
+ size_t acls_d_len;
|
||||
+ size_t xattr_map_size; /* Size of the xattr map */
|
||||
+ struct xattr_array *xattr_map;
|
||||
/* Length and contents of name. */
|
||||
size_t file_name_len;
|
||||
char file_name[1];
|
||||
};
|
||||
|
||||
@@ -97,6 +104,18 @@ struct delayed_link
|
||||
@@ -134,6 +142,18 @@ struct delayed_link
|
||||
hard-linked together. */
|
||||
struct string_list *sources;
|
||||
|
||||
@ -349,21 +350,21 @@ diff -urNp tar-1.23-orig/src/extract.c tar-1.23/src/extract.c
|
||||
/* The desired target of the desired link. */
|
||||
char target[1];
|
||||
};
|
||||
@@ -290,6 +309,10 @@ set_stat (char const *file_name,
|
||||
give files away. */
|
||||
@@ -335,6 +355,10 @@ set_stat (char const *file_name,
|
||||
utime_error (file_name);
|
||||
}
|
||||
|
||||
+ xattrs_acls_set(st, file_name, typeflag);
|
||||
+ xattrs_selinux_set(st, file_name, typeflag);
|
||||
+ xattrs_xattrs_set(st, file_name, typeflag);
|
||||
+
|
||||
if (0 < same_owner_option && permstatus != INTERDIR_PERMSTATUS)
|
||||
if (0 < same_owner_option && ! interdir)
|
||||
{
|
||||
/* When lchown exists, it should be used to change the attributes of
|
||||
@@ -366,6 +389,29 @@ delay_set_stat (char const *file_name, s
|
||||
data->invert_permissions = invert_permissions;
|
||||
data->permstatus = permstatus;
|
||||
/* Some systems allow non-root users to give files away. Once this
|
||||
@@ -431,6 +455,29 @@ delay_set_stat (char const *file_name, s
|
||||
data->atflag = atflag;
|
||||
data->after_links = 0;
|
||||
data->change_dir = chdir_current;
|
||||
+ data->cntx_name = NULL;
|
||||
+ assign_string (&data->cntx_name, st->cntx_name);
|
||||
+ if (st->acls_a_ptr)
|
||||
@ -389,9 +390,9 @@ diff -urNp tar-1.23-orig/src/extract.c tar-1.23/src/extract.c
|
||||
+ xheader_xattr_copy (st, &data->xattr_map, &data->xattr_map_size);
|
||||
strcpy (data->file_name, file_name);
|
||||
delayed_set_stat_head = data;
|
||||
}
|
||||
@@ -571,6 +617,31 @@ maybe_recoverable (char *file_name, int
|
||||
}
|
||||
if (must_be_dot_or_slash (file_name))
|
||||
@@ -661,6 +708,31 @@ maybe_recoverable (char *file_name, bool
|
||||
return RECOVER_NO;
|
||||
}
|
||||
|
||||
+/* Restore stat extended attributes (xattr) for FILE_NAME, using information
|
||||
@ -412,7 +413,7 @@ diff -urNp tar-1.23-orig/src/extract.c tar-1.23/src/extract.c
|
||||
+
|
||||
+ do
|
||||
+ status = mknod (file_name, mode ^ invert_permissions, 0);
|
||||
+ while (status && maybe_recoverable ((char *)file_name, &interdir_made));
|
||||
+ while (status && maybe_recoverable ((char *)file_name, false, &interdir_made));
|
||||
+ xattrs_xattrs_set(st, file_name, typeflag);
|
||||
+ *file_created = 1;
|
||||
+ }
|
||||
@ -422,19 +423,20 @@ diff -urNp tar-1.23-orig/src/extract.c tar-1.23/src/extract.c
|
||||
/* Fix the statuses of all directories whose statuses need fixing, and
|
||||
which are not ancestors of FILE_NAME. If AFTER_LINKS is
|
||||
nonzero, do this for all such directories; otherwise, stop at the
|
||||
@@ -624,11 +695,22 @@ apply_nonancestor_delayed_set_stat (char
|
||||
@@ -721,12 +793,23 @@ apply_nonancestor_delayed_set_stat (char
|
||||
sb.stat.st_gid = data->gid;
|
||||
sb.atime = data->atime;
|
||||
sb.mtime = data->mtime;
|
||||
+ sb.cntx_name = data->cntx_name;
|
||||
+ sb.acls_a_ptr = data->acls_a_ptr;
|
||||
+ sb.acls_a_len = data->acls_a_len;
|
||||
+ sb.acls_d_ptr = data->acls_d_ptr;
|
||||
+ sb.acls_d_len = data->acls_d_len;
|
||||
+ sb.xattr_map = data->xattr_map;
|
||||
+ sb.xattr_map_size = data->xattr_map_size;
|
||||
set_stat (data->file_name, &sb, cur_info,
|
||||
data->invert_permissions, data->permstatus, DIRTYPE);
|
||||
+ sb.cntx_name = data->cntx_name;
|
||||
+ sb.acls_a_ptr = data->acls_a_ptr;
|
||||
+ sb.acls_a_len = data->acls_a_len;
|
||||
+ sb.acls_d_ptr = data->acls_d_ptr;
|
||||
+ sb.acls_d_len = data->acls_d_len;
|
||||
+ sb.xattr_map = data->xattr_map;
|
||||
+ sb.xattr_map_size = data->xattr_map_size;
|
||||
set_stat (data->file_name, &sb,
|
||||
-1, current_mode, current_mode_mask,
|
||||
DIRTYPE, data->interdir, data->atflag);
|
||||
}
|
||||
|
||||
delayed_set_stat_head = data->next;
|
||||
@ -445,30 +447,37 @@ diff -urNp tar-1.23-orig/src/extract.c tar-1.23/src/extract.c
|
||||
free (data);
|
||||
}
|
||||
}
|
||||
@@ -730,7 +812,7 @@ extract_dir (char *file_name, int typefl
|
||||
|
||||
@@ -842,6 +925,7 @@ extract_dir (char *file_name, int typefl
|
||||
|
||||
static int
|
||||
-open_output_file (char *file_name, int typeflag, mode_t mode)
|
||||
+open_output_file (char *file_name, int typeflag, mode_t mode, int file_created)
|
||||
open_output_file (char const *file_name, int typeflag, mode_t mode,
|
||||
+ int file_created,
|
||||
mode_t *current_mode, mode_t *current_mode_mask)
|
||||
{
|
||||
int fd;
|
||||
int openflag = (O_WRONLY | O_BINARY | O_CREAT
|
||||
@@ -738,6 +820,10 @@ open_output_file (char *file_name, int t
|
||||
? O_TRUNC
|
||||
@@ -852,6 +936,10 @@ open_output_file (char const *file_name,
|
||||
? O_TRUNC | (dereference_option ? 0 : O_NOFOLLOW)
|
||||
: O_EXCL));
|
||||
|
||||
+ /* File might be created in set_xattr. So clear O_EXCL to avoid open() failure */
|
||||
+ if (file_created)
|
||||
+ openflag = openflag & ~O_EXCL;
|
||||
+
|
||||
#if O_CTG
|
||||
/* Contiguous files (on the Masscomp) have to specify the size in
|
||||
the open call that creates them. */
|
||||
@@ -796,8 +882,18 @@ extract_file (char *file_name, int typef
|
||||
if (typeflag == CONTTYPE)
|
||||
{
|
||||
static int conttype_diagnosed;
|
||||
@@ -908,6 +996,7 @@ extract_file (char *file_name, int typef
|
||||
bool interdir_made = false;
|
||||
mode_t mode = (current_stat_info.stat.st_mode & MODE_RWX
|
||||
& ~ (0 < same_owner_option ? S_IRWXG | S_IRWXO : 0));
|
||||
+ mode_t invert_permissions = 0 < same_owner_option ? mode & (S_IRWXG | S_IRWXO) : 0;
|
||||
mode_t current_mode = 0;
|
||||
mode_t current_mode_mask = 0;
|
||||
|
||||
@@ -924,7 +1013,17 @@ extract_file (char *file_name, int typef
|
||||
}
|
||||
else
|
||||
{
|
||||
int recover = RECOVER_NO;
|
||||
+ int file_created = 0;
|
||||
+ if (set_xattr (file_name, ¤t_stat_info, invert_permissions,
|
||||
+ typeflag, &file_created))
|
||||
@ -478,14 +487,12 @@ diff -urNp tar-1.23-orig/src/extract.c tar-1.23/src/extract.c
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
do
|
||||
- fd = open_output_file (file_name, typeflag, mode ^ invert_permissions);
|
||||
+ fd = open_output_file (file_name, typeflag, mode ^ invert_permissions,
|
||||
+ file_created);
|
||||
while (fd < 0
|
||||
&& (recover = maybe_recoverable (file_name, &interdir_made))
|
||||
== RECOVER_OK);
|
||||
@@ -922,6 +1018,13 @@ create_placeholder_file (char *file_name
|
||||
while ((fd = open_output_file (file_name, typeflag, mode,
|
||||
+ file_created,
|
||||
¤t_mode, ¤t_mode_mask))
|
||||
< 0)
|
||||
{
|
||||
@@ -1065,6 +1164,13 @@ create_placeholder_file (char *file_name
|
||||
+ strlen (file_name) + 1);
|
||||
p->sources->next = 0;
|
||||
strcpy (p->sources->string, file_name);
|
||||
@ -499,10 +506,10 @@ diff -urNp tar-1.23-orig/src/extract.c tar-1.23/src/extract.c
|
||||
strcpy (p->target, current_stat_info.link_name);
|
||||
|
||||
h = delayed_set_stat_head;
|
||||
@@ -1335,6 +1438,13 @@ apply_delayed_links (void)
|
||||
struct tar_stat_info st1;
|
||||
st1.stat.st_uid = ds->uid;
|
||||
@@ -1499,6 +1605,13 @@ apply_delayed_links (void)
|
||||
st1.stat.st_gid = ds->gid;
|
||||
st1.atime = ds->atime;
|
||||
st1.mtime = ds->mtime;
|
||||
+ st1.cntx_name = ds->cntx_name;
|
||||
+ st1.acls_a_ptr = ds->acls_a_ptr;
|
||||
+ st1.acls_a_len = ds->acls_a_len;
|
||||
@ -510,10 +517,10 @@ diff -urNp tar-1.23-orig/src/extract.c tar-1.23/src/extract.c
|
||||
+ st1.acls_d_len = ds->acls_d_len;
|
||||
+ st1.xattr_map = ds->xattr_map;
|
||||
+ st1.xattr_map_size = ds->xattr_map_size;
|
||||
set_stat (source, &st1, NULL, 0, 0, SYMTYPE);
|
||||
set_stat (source, &st1, -1, 0, 0, SYMTYPE,
|
||||
false, AT_SYMLINK_NOFOLLOW);
|
||||
valid_source = source;
|
||||
}
|
||||
@@ -1348,6 +1458,9 @@ apply_delayed_links (void)
|
||||
@@ -1513,6 +1626,9 @@ apply_delayed_links (void)
|
||||
sources = next;
|
||||
}
|
||||
|
||||
@ -523,10 +530,10 @@ diff -urNp tar-1.23-orig/src/extract.c tar-1.23/src/extract.c
|
||||
{
|
||||
struct delayed_link *next = ds->next;
|
||||
free (ds);
|
||||
diff -urNp tar-1.23-orig/src/list.c tar-1.23/src/list.c
|
||||
--- tar-1.23-orig/src/list.c 2010-08-16 14:29:00.411912161 +0200
|
||||
+++ tar-1.23/src/list.c 2010-08-16 14:32:11.468912021 +0200
|
||||
@@ -586,6 +586,13 @@ decode_header (union block *header, stru
|
||||
diff -urNp tar-1.24-orig/src/list.c tar-1.24/src/list.c
|
||||
--- tar-1.24-orig/src/list.c 2010-10-25 09:15:14.216463863 +0200
|
||||
+++ tar-1.24/src/list.c 2010-10-25 10:24:52.563213968 +0200
|
||||
@@ -597,6 +597,13 @@ decode_header (union block *header, stru
|
||||
assign_string (&stat_info->gname,
|
||||
header->header.gname[0] ? header->header.gname : NULL);
|
||||
|
||||
@ -540,9 +547,9 @@ diff -urNp tar-1.23-orig/src/list.c tar-1.23/src/list.c
|
||||
if (format == OLDGNU_FORMAT && incremental_option)
|
||||
{
|
||||
stat_info->atime.tv_sec = TIME_FROM_HEADER (header->oldgnu_header.atime);
|
||||
diff -urNp tar-1.23-orig/src/Makefile.am tar-1.23/src/Makefile.am
|
||||
--- tar-1.23-orig/src/Makefile.am 2010-01-26 12:30:20.000000000 +0100
|
||||
+++ tar-1.23/src/Makefile.am 2010-08-16 14:32:11.469911951 +0200
|
||||
diff -urNp tar-1.24-orig/src/Makefile.am tar-1.24/src/Makefile.am
|
||||
--- tar-1.24-orig/src/Makefile.am 2010-10-24 20:07:54.000000000 +0200
|
||||
+++ tar-1.24/src/Makefile.am 2010-10-25 10:24:52.564214456 +0200
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
bin_PROGRAMS = tar
|
||||
@ -564,11 +571,11 @@ diff -urNp tar-1.23-orig/src/Makefile.am tar-1.23/src/Makefile.am
|
||||
|
||||
LDADD = ../lib/libtar.a ../gnu/libgnu.a $(LIBINTL) $(LIBICONV)
|
||||
|
||||
-tar_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME)
|
||||
+tar_LDADD = $(LIBS) $(LDADD) $(LIB_CLOCK_GETTIME)
|
||||
diff -urNp tar-1.23-orig/src/tar.c tar-1.23/src/tar.c
|
||||
--- tar-1.23-orig/src/tar.c 2010-08-16 14:29:00.433923894 +0200
|
||||
+++ tar-1.23/src/tar.c 2010-08-16 14:32:11.472912580 +0200
|
||||
-tar_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_EACCESS)
|
||||
+tar_LDADD = $(LIBS) $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_EACCESS)
|
||||
diff -urNp tar-1.24-orig/src/tar.c tar-1.24/src/tar.c
|
||||
--- tar-1.24-orig/src/tar.c 2010-10-24 20:07:55.000000000 +0200
|
||||
+++ tar-1.24/src/tar.c 2010-10-25 10:24:52.565223676 +0200
|
||||
@@ -255,7 +255,8 @@ tar_set_quoting_style (char *arg)
|
||||
|
||||
enum
|
||||
@ -579,7 +586,7 @@ diff -urNp tar-1.23-orig/src/tar.c tar-1.23/src/tar.c
|
||||
ATIME_PRESERVE_OPTION,
|
||||
BACKUP_OPTION,
|
||||
CHECK_DEVICE_OPTION,
|
||||
@@ -287,6 +288,7 @@ enum
|
||||
@@ -288,6 +289,7 @@ enum
|
||||
MODE_OPTION,
|
||||
MTIME_OPTION,
|
||||
NEWER_MTIME_OPTION,
|
||||
@ -587,7 +594,7 @@ diff -urNp tar-1.23-orig/src/tar.c tar-1.23/src/tar.c
|
||||
NO_ANCHORED_OPTION,
|
||||
NO_AUTO_COMPRESS_OPTION,
|
||||
NO_CHECK_DEVICE_OPTION,
|
||||
@@ -300,9 +302,11 @@ enum
|
||||
@@ -301,9 +303,11 @@ enum
|
||||
NO_SAME_OWNER_OPTION,
|
||||
NO_SAME_PERMISSIONS_OPTION,
|
||||
NO_SEEK_OPTION,
|
||||
@ -599,7 +606,7 @@ diff -urNp tar-1.23-orig/src/tar.c tar-1.23/src/tar.c
|
||||
NULL_OPTION,
|
||||
NUMERIC_OWNER_OPTION,
|
||||
OCCURRENCE_OPTION,
|
||||
@@ -324,6 +328,7 @@ enum
|
||||
@@ -325,6 +329,7 @@ enum
|
||||
RMT_COMMAND_OPTION,
|
||||
RSH_COMMAND_OPTION,
|
||||
SAME_OWNER_OPTION,
|
||||
@ -607,9 +614,9 @@ diff -urNp tar-1.23-orig/src/tar.c tar-1.23/src/tar.c
|
||||
SHOW_DEFAULTS_OPTION,
|
||||
SHOW_OMITTED_DIRS_OPTION,
|
||||
SHOW_TRANSFORMED_NAMES_OPTION,
|
||||
@@ -339,7 +344,8 @@ enum
|
||||
@@ -340,7 +345,8 @@ enum
|
||||
VOLNO_FILE_OPTION,
|
||||
WARNING_OPTION,
|
||||
WARNING_OPTION,
|
||||
WILDCARDS_MATCH_SLASH_OPTION,
|
||||
- WILDCARDS_OPTION
|
||||
+ WILDCARDS_OPTION,
|
||||
@ -617,7 +624,7 @@ diff -urNp tar-1.23-orig/src/tar.c tar-1.23/src/tar.c
|
||||
};
|
||||
|
||||
const char *argp_program_version = "tar (" PACKAGE_NAME ") " VERSION;
|
||||
@@ -485,6 +491,10 @@ static struct argp_option options[] = {
|
||||
@@ -486,6 +492,10 @@ static struct argp_option options[] = {
|
||||
{NULL, 0, NULL, 0,
|
||||
N_("Handling of file attributes:"), GRID },
|
||||
|
||||
@ -628,7 +635,7 @@ diff -urNp tar-1.23-orig/src/tar.c tar-1.23/src/tar.c
|
||||
{"owner", OWNER_OPTION, N_("NAME"), 0,
|
||||
N_("force NAME as owner for added files"), GRID+1 },
|
||||
{"group", GROUP_OPTION, N_("NAME"), 0,
|
||||
@@ -515,6 +525,14 @@ static struct argp_option options[] = {
|
||||
@@ -516,6 +526,14 @@ static struct argp_option options[] = {
|
||||
{"preserve-order", 's', 0, 0,
|
||||
N_("sort names to extract to match archive"), GRID+1 },
|
||||
{"same-order", 0, 0, OPTION_ALIAS, NULL, GRID+1 },
|
||||
@ -643,7 +650,7 @@ diff -urNp tar-1.23-orig/src/tar.c tar-1.23/src/tar.c
|
||||
{"preserve", PRESERVE_OPTION, 0, 0,
|
||||
N_("same as both -p and -s"), GRID+1 },
|
||||
{"delay-directory-restore", DELAY_DIRECTORY_RESTORE_OPTION, 0, 0,
|
||||
@@ -2063,6 +2081,37 @@ parse_opt (int key, char *arg, struct ar
|
||||
@@ -2079,6 +2097,37 @@ parse_opt (int key, char *arg, struct ar
|
||||
same_permissions_option = -1;
|
||||
break;
|
||||
|
||||
@ -681,7 +688,7 @@ diff -urNp tar-1.23-orig/src/tar.c tar-1.23/src/tar.c
|
||||
case RECURSION_OPTION:
|
||||
recursion_option = FNM_LEADING_DIR;
|
||||
break;
|
||||
@@ -2445,6 +2494,29 @@ decode_options (int argc, char **argv)
|
||||
@@ -2461,6 +2510,29 @@ decode_options (int argc, char **argv)
|
||||
|| subcommand_option != LIST_SUBCOMMAND))
|
||||
USAGE_ERROR ((0, 0, _("--pax-option can be used only on POSIX archives")));
|
||||
|
||||
@ -711,10 +718,10 @@ diff -urNp tar-1.23-orig/src/tar.c tar-1.23/src/tar.c
|
||||
/* If ready to unlink hierarchies, so we are for simpler files. */
|
||||
if (recursive_unlink_option)
|
||||
old_files_option = UNLINK_FIRST_OLD_FILES;
|
||||
@@ -2665,11 +2737,15 @@ tar_stat_init (struct tar_stat_info *st)
|
||||
void
|
||||
@@ -2713,11 +2785,15 @@ void
|
||||
tar_stat_destroy (struct tar_stat_info *st)
|
||||
{
|
||||
tar_stat_close (st);
|
||||
+ xheader_xattr_free (st->xattr_map, st->xattr_map_size);
|
||||
free (st->orig_file_name);
|
||||
free (st->file_name);
|
||||
@ -727,9 +734,9 @@ diff -urNp tar-1.23-orig/src/tar.c tar-1.23/src/tar.c
|
||||
free (st->sparse_map);
|
||||
free (st->dumpdir);
|
||||
xheader_destroy (&st->xhdr);
|
||||
diff -urNp tar-1.23-orig/src/tar.h tar-1.23/src/tar.h
|
||||
--- tar-1.23-orig/src/tar.h 2010-01-26 12:30:20.000000000 +0100
|
||||
+++ tar-1.23/src/tar.h 2010-08-16 14:32:11.473924383 +0200
|
||||
diff -urNp tar-1.24-orig/src/tar.h tar-1.24/src/tar.h
|
||||
--- tar-1.24-orig/src/tar.h 2010-10-24 20:07:46.000000000 +0200
|
||||
+++ tar-1.24/src/tar.h 2010-10-25 10:24:52.567223606 +0200
|
||||
@@ -276,6 +276,14 @@ struct xheader
|
||||
uintmax_t string_length;
|
||||
};
|
||||
@ -770,10 +777,10 @@ diff -urNp tar-1.23-orig/src/tar.h tar-1.23/src/tar.h
|
||||
+
|
||||
/* Extended headers */
|
||||
struct xheader xhdr;
|
||||
|
||||
diff -urNp tar-1.23-orig/src/xattrs.c tar-1.23/src/xattrs.c
|
||||
--- tar-1.23-orig/src/xattrs.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ tar-1.23/src/xattrs.c 2010-08-16 14:34:12.554509938 +0200
|
||||
|
||||
diff -urNp tar-1.24-orig/src/xattrs.c tar-1.24/src/xattrs.c
|
||||
--- tar-1.24-orig/src/xattrs.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ tar-1.24/src/xattrs.c 2010-10-25 10:24:52.568214736 +0200
|
||||
@@ -0,0 +1,489 @@
|
||||
+/* Create a tar archive.
|
||||
+
|
||||
@ -1264,9 +1271,9 @@ diff -urNp tar-1.23-orig/src/xattrs.c tar-1.23/src/xattrs.c
|
||||
+#endif
|
||||
+ }
|
||||
+}
|
||||
diff -urNp tar-1.23-orig/src/xattrs.h tar-1.23/src/xattrs.h
|
||||
--- tar-1.23-orig/src/xattrs.h 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ tar-1.23/src/xattrs.h 2010-08-16 14:32:11.475920821 +0200
|
||||
diff -urNp tar-1.24-orig/src/xattrs.h tar-1.24/src/xattrs.h
|
||||
--- tar-1.24-orig/src/xattrs.h 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ tar-1.24/src/xattrs.h 2010-10-25 10:24:52.569214526 +0200
|
||||
@@ -0,0 +1,14 @@
|
||||
+
|
||||
+extern void xattrs_acls_get(struct tar_stat_info *st,
|
||||
@ -1282,10 +1289,10 @@ diff -urNp tar-1.23-orig/src/xattrs.h tar-1.23/src/xattrs.h
|
||||
+ char const *file_name, char typeflag);
|
||||
+extern void xattrs_xattrs_set(struct tar_stat_info const *st,
|
||||
+ char const *file_name, char typeflag);
|
||||
diff -urNp tar-1.23-orig/src/xheader.c tar-1.23/src/xheader.c
|
||||
--- tar-1.23-orig/src/xheader.c 2010-02-12 11:03:09.000000000 +0100
|
||||
+++ tar-1.23/src/xheader.c 2010-08-16 14:38:39.480912020 +0200
|
||||
@@ -459,6 +459,74 @@ xheader_write_global (struct xheader *xh
|
||||
diff -urNp tar-1.24-orig/src/xheader.c tar-1.24/src/xheader.c
|
||||
--- tar-1.24-orig/src/xheader.c 2010-10-24 20:07:46.000000000 +0200
|
||||
+++ tar-1.24/src/xheader.c 2010-10-25 10:24:52.570223396 +0200
|
||||
@@ -460,6 +460,74 @@ xheader_write_global (struct xheader *xh
|
||||
}
|
||||
}
|
||||
|
||||
@ -1360,7 +1367,7 @@ diff -urNp tar-1.23-orig/src/xheader.c tar-1.23/src/xheader.c
|
||||
|
||||
/* General Interface */
|
||||
|
||||
@@ -472,6 +540,7 @@ struct xhdr_tab
|
||||
@@ -473,6 +541,7 @@ struct xhdr_tab
|
||||
struct xheader *, void const *data);
|
||||
void (*decoder) (struct tar_stat_info *, char const *, char const *, size_t);
|
||||
int flags;
|
||||
@ -1368,7 +1375,7 @@ diff -urNp tar-1.23-orig/src/xheader.c tar-1.23/src/xheader.c
|
||||
};
|
||||
|
||||
/* This declaration must be extern, because ISO C99 section 6.9.2
|
||||
@@ -488,8 +557,17 @@ locate_handler (char const *keyword)
|
||||
@@ -489,8 +558,17 @@ locate_handler (char const *keyword)
|
||||
struct xhdr_tab const *p;
|
||||
|
||||
for (p = xhdr_tab; p->keyword; p++)
|
||||
@ -1388,7 +1395,7 @@ diff -urNp tar-1.23-orig/src/xheader.c tar-1.23/src/xheader.c
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -499,7 +577,7 @@ xheader_protected_pattern_p (const char
|
||||
@@ -500,7 +578,7 @@ xheader_protected_pattern_p (const char
|
||||
struct xhdr_tab const *p;
|
||||
|
||||
for (p = xhdr_tab; p->keyword; p++)
|
||||
@ -1397,7 +1404,7 @@ diff -urNp tar-1.23-orig/src/xheader.c tar-1.23/src/xheader.c
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
@@ -510,7 +588,7 @@ xheader_protected_keyword_p (const char
|
||||
@@ -511,7 +589,7 @@ xheader_protected_keyword_p (const char
|
||||
struct xhdr_tab const *p;
|
||||
|
||||
for (p = xhdr_tab; p->keyword; p++)
|
||||
@ -1406,7 +1413,7 @@ diff -urNp tar-1.23-orig/src/xheader.c tar-1.23/src/xheader.c
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
@@ -1469,6 +1547,71 @@ volume_filename_decoder (struct tar_stat
|
||||
@@ -1470,6 +1548,71 @@ volume_filename_decoder (struct tar_stat
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1478,7 +1485,7 @@ diff -urNp tar-1.23-orig/src/xheader.c tar-1.23/src/xheader.c
|
||||
sparse_major_coder (struct tar_stat_info const *st, char const *keyword,
|
||||
struct xheader *xhdr, void const *data)
|
||||
{
|
||||
@@ -1505,53 +1648,53 @@ sparse_minor_decoder (struct tar_stat_in
|
||||
@@ -1506,53 +1649,53 @@ sparse_minor_decoder (struct tar_stat_in
|
||||
}
|
||||
|
||||
struct xhdr_tab const xhdr_tab[] = {
|
||||
@ -1555,7 +1562,7 @@ diff -urNp tar-1.23-orig/src/xheader.c tar-1.23/src/xheader.c
|
||||
|
||||
/* These may be present in a first global header of the archive.
|
||||
They provide the same functionality as GNUTYPE_MULTIVOL header.
|
||||
@@ -1560,11 +1703,41 @@ struct xhdr_tab const xhdr_tab[] = {
|
||||
@@ -1561,11 +1704,41 @@ struct xhdr_tab const xhdr_tab[] = {
|
||||
GNU.volume.offset keeps the offset of the start of this volume,
|
||||
otherwise kept in oldgnu_header.offset. */
|
||||
{ "GNU.volume.filename", volume_label_coder, volume_filename_decoder,
|
26
tar.spec
26
tar.spec
@ -4,13 +4,13 @@
|
||||
Summary: A GNU file archiving program
|
||||
Name: tar
|
||||
Epoch: 2
|
||||
Version: 1.23
|
||||
Release: 8%{?dist}
|
||||
Version: 1.24
|
||||
Release: 1%{?dist}
|
||||
License: GPLv3+
|
||||
Group: Applications/Archiving
|
||||
URL: http://www.gnu.org/software/tar/
|
||||
Source0: ftp://ftp.gnu.org/pub/gnu/tar/tar-%{version}.tar.bz2
|
||||
Source1: ftp://ftp.gnu.org/pub/gnu/tar/tar-%{version}.tar.bz2.sig
|
||||
Source0: ftp://ftp.gnu.org/pub/gnu/tar/tar-%{version}.tar.xz
|
||||
Source1: ftp://ftp.gnu.org/pub/gnu/tar/tar-%{version}.tar.xz.sig
|
||||
#Manpage for tar and gtar, a bit modified help2man generated manpage
|
||||
Source2: tar.1
|
||||
#Stop issuing lone zero block warnings
|
||||
@ -19,7 +19,7 @@ Patch1: tar-1.14-loneZeroWarning.patch
|
||||
#when ftruncate may fail to grow the size of a file.(#179507)
|
||||
Patch2: tar-1.15.1-vfatTruncate.patch
|
||||
#Add support for selinux, acl and extended attributes
|
||||
Patch3: tar-1.23-xattrs.patch
|
||||
Patch3: tar-1.24-xattrs.patch
|
||||
#change inclusion defaults of tar to "--wildcards --anchored
|
||||
#--wildcards-match-slash" for compatibility reasons (#206841)
|
||||
Patch4: tar-1.17-wildcards.patch
|
||||
@ -31,12 +31,10 @@ Patch5: tar-1.22-atime-rofs.patch
|
||||
Patch6: tar-1.22-fortifysourcessigabrt.patch
|
||||
#oldarchive option was not working(#594044)
|
||||
Patch7: tar-1.23-oldarchive.patch
|
||||
#fix exclusion of long file names with --xattrs (#634866)
|
||||
Patch8: tar-1.23-longnames.patch
|
||||
#do not crash with --listed-incremental (#635318)
|
||||
Patch9: tar-1.23-listedincremental.patch
|
||||
#match non-stripped file names (#637085)
|
||||
Patch10: tar-1.23-stripcomponents.patch
|
||||
Patch8: tar-1.23-stripcomponents.patch
|
||||
#fix bug with -C and extracting directories
|
||||
Patch9: tar-1.24-extractingdirs.patch
|
||||
Requires: info
|
||||
BuildRequires: autoconf automake gzip texinfo gettext libacl-devel gawk rsh
|
||||
%if %{WITH_SELINUX}
|
||||
@ -67,9 +65,8 @@ the rmt package.
|
||||
%patch5 -p1 -b .rofs
|
||||
%patch6 -p1 -b .fortify
|
||||
%patch7 -p1 -b .oldarchive
|
||||
%patch8 -p1 -b .longnames
|
||||
%patch9 -p1 -b .listedincremental
|
||||
%patch10 -p1 -b .stripcomponents
|
||||
%patch8 -p1 -b .stripcomponents
|
||||
%patch9 -p1 -b .extractC
|
||||
|
||||
autoreconf
|
||||
|
||||
@ -131,6 +128,9 @@ fi
|
||||
%{_infodir}/tar.info*
|
||||
|
||||
%changelog
|
||||
* Mon Oct 25 2010 Ondrej Vasik <ovasik@redhat.com> 2:1.24-1
|
||||
- new upstream release 1.24, use .xz archive
|
||||
|
||||
* Wed Sep 29 2010 jkeating - 2:1.23-8
|
||||
- Rebuilt for gcc bug 634757
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user