upgrade to 1.17
This commit is contained in:
parent
b49f43c036
commit
fc86677545
@ -1,3 +1,2 @@
|
|||||||
tar-1.15.1.tar.gz
|
tar-1.17.tar.gz
|
||||||
tar-1.15.1.tar.gz.sig
|
tar-1.17.tar.gz.sig
|
||||||
tar.1
|
|
||||||
|
5
sources
5
sources
@ -1,3 +1,2 @@
|
|||||||
d87021366fe6488e9dc398fcdcb6ed7d tar-1.15.1.tar.gz
|
65e568b83caf7aa865144031e7a7c6a8 tar-1.17.tar.gz
|
||||||
4be36b7651557cc236ed6fe9b6966fee tar-1.15.1.tar.gz.sig
|
a7f959b4c8bd9aaa5a6677acfabff699 tar-1.17.tar.gz.sig
|
||||||
a554cb69d67c0c7d16d864b9c6f05c11 tar.1
|
|
||||||
|
@ -1,214 +0,0 @@
|
|||||||
--- tar-1.15.1/configure.nolibrt 2004-12-21 13:30:30.000000000 +0000
|
|
||||||
+++ tar-1.15.1/configure 2005-01-07 11:18:51.878839553 +0000
|
|
||||||
@@ -11470,20 +11470,20 @@
|
|
||||||
# dnl Persuade glibc <time.h> to declare these functions.
|
|
||||||
|
|
||||||
|
|
||||||
- # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function.
|
|
||||||
+ # Solaris 2.5.1 needs -lposix4 to get the clock_gettyme function.
|
|
||||||
# Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
|
|
||||||
|
|
||||||
# Save and restore LIBS so e.g., -lrt, isn't added to it. Otherwise, *all*
|
|
||||||
# programs in the package would end up linked with that potentially-shared
|
|
||||||
# library, inducing unnecessary run-time overhead.
|
|
||||||
fetish_saved_libs=$LIBS
|
|
||||||
- echo "$as_me:$LINENO: checking for library containing clock_gettime" >&5
|
|
||||||
-echo $ECHO_N "checking for library containing clock_gettime... $ECHO_C" >&6
|
|
||||||
-if test "${ac_cv_search_clock_gettime+set}" = set; then
|
|
||||||
+ echo "$as_me:$LINENO: checking for library containing clock_gettyme" >&5
|
|
||||||
+echo $ECHO_N "checking for library containing clock_gettyme... $ECHO_C" >&6
|
|
||||||
+if test "${ac_cv_search_clock_gettyme+set}" = set; then
|
|
||||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
||||||
else
|
|
||||||
ac_func_search_save_LIBS=$LIBS
|
|
||||||
-ac_cv_search_clock_gettime=no
|
|
||||||
+ac_cv_search_clock_gettyme=no
|
|
||||||
cat >conftest.$ac_ext <<_ACEOF
|
|
||||||
/* confdefs.h. */
|
|
||||||
_ACEOF
|
|
||||||
@@ -11497,11 +11497,11 @@
|
|
||||||
#endif
|
|
||||||
/* We use char because int might match the return type of a gcc2
|
|
||||||
builtin and then its argument prototype would still apply. */
|
|
||||||
-char clock_gettime ();
|
|
||||||
+char clock_gettyme ();
|
|
||||||
int
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
-clock_gettime ();
|
|
||||||
+clock_gettyme ();
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -11528,7 +11528,7 @@
|
|
||||||
ac_status=$?
|
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
(exit $ac_status); }; }; then
|
|
||||||
- ac_cv_search_clock_gettime="none required"
|
|
||||||
+ ac_cv_search_clock_gettyme="none required"
|
|
||||||
else
|
|
||||||
echo "$as_me: failed program was:" >&5
|
|
||||||
sed 's/^/| /' conftest.$ac_ext >&5
|
|
||||||
@@ -11536,7 +11536,7 @@
|
|
||||||
fi
|
|
||||||
rm -f conftest.err conftest.$ac_objext \
|
|
||||||
conftest$ac_exeext conftest.$ac_ext
|
|
||||||
-if test "$ac_cv_search_clock_gettime" = no; then
|
|
||||||
+if test "$ac_cv_search_clock_gettyme" = no; then
|
|
||||||
for ac_lib in rt posix4; do
|
|
||||||
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
|
|
||||||
cat >conftest.$ac_ext <<_ACEOF
|
|
||||||
@@ -11552,11 +11552,11 @@
|
|
||||||
#endif
|
|
||||||
/* We use char because int might match the return type of a gcc2
|
|
||||||
builtin and then its argument prototype would still apply. */
|
|
||||||
-char clock_gettime ();
|
|
||||||
+char clock_gettyme ();
|
|
||||||
int
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
-clock_gettime ();
|
|
||||||
+clock_gettyme ();
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -11583,7 +11583,7 @@
|
|
||||||
ac_status=$?
|
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
(exit $ac_status); }; }; then
|
|
||||||
- ac_cv_search_clock_gettime="-l$ac_lib"
|
|
||||||
+ ac_cv_search_clock_gettyme="-l$ac_lib"
|
|
||||||
break
|
|
||||||
else
|
|
||||||
echo "$as_me: failed program was:" >&5
|
|
||||||
@@ -11596,18 +11596,18 @@
|
|
||||||
fi
|
|
||||||
LIBS=$ac_func_search_save_LIBS
|
|
||||||
fi
|
|
||||||
-echo "$as_me:$LINENO: result: $ac_cv_search_clock_gettime" >&5
|
|
||||||
-echo "${ECHO_T}$ac_cv_search_clock_gettime" >&6
|
|
||||||
-if test "$ac_cv_search_clock_gettime" != no; then
|
|
||||||
- test "$ac_cv_search_clock_gettime" = "none required" || LIBS="$ac_cv_search_clock_gettime $LIBS"
|
|
||||||
- test "$ac_cv_search_clock_gettime" = "none required" ||
|
|
||||||
- LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime
|
|
||||||
+echo "$as_me:$LINENO: result: $ac_cv_search_clock_gettyme" >&5
|
|
||||||
+echo "${ECHO_T}$ac_cv_search_clock_gettyme" >&6
|
|
||||||
+if test "$ac_cv_search_clock_gettyme" != no; then
|
|
||||||
+ test "$ac_cv_search_clock_gettyme" = "none required" || LIBS="$ac_cv_search_clock_gettyme $LIBS"
|
|
||||||
+ test "$ac_cv_search_clock_gettyme" = "none required" ||
|
|
||||||
+ LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettyme
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-for ac_func in clock_gettime clock_settime
|
|
||||||
+for ac_func in clock_gettyme clock_settime
|
|
||||||
do
|
|
||||||
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
|
||||||
echo "$as_me:$LINENO: checking for $ac_func" >&5
|
|
||||||
@@ -20541,17 +20541,17 @@
|
|
||||||
# programs in the package would end up linked with that potentially-shared
|
|
||||||
# library, inducing unnecessary run-time overhead.
|
|
||||||
|
|
||||||
-# Solaris 2.5.1 needs -lposix4 to get the clock_gettime function.
|
|
||||||
+# Solaris 2.5.1 needs -lposix4 to get the clock_gettyme function.
|
|
||||||
# Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
|
|
||||||
tar_save_LIBS=$LIBS
|
|
||||||
LIB_CLOCK_GETTIME=
|
|
||||||
- echo "$as_me:$LINENO: checking for library containing clock_gettime" >&5
|
|
||||||
-echo $ECHO_N "checking for library containing clock_gettime... $ECHO_C" >&6
|
|
||||||
-if test "${ac_cv_search_clock_gettime+set}" = set; then
|
|
||||||
+ echo "$as_me:$LINENO: checking for library containing clock_gettyme" >&5
|
|
||||||
+echo $ECHO_N "checking for library containing clock_gettyme... $ECHO_C" >&6
|
|
||||||
+if test "${ac_cv_search_clock_gettyme+set}" = set; then
|
|
||||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
||||||
else
|
|
||||||
ac_func_search_save_LIBS=$LIBS
|
|
||||||
-ac_cv_search_clock_gettime=no
|
|
||||||
+ac_cv_search_clock_gettyme=no
|
|
||||||
cat >conftest.$ac_ext <<_ACEOF
|
|
||||||
/* confdefs.h. */
|
|
||||||
_ACEOF
|
|
||||||
@@ -20565,11 +20565,11 @@
|
|
||||||
#endif
|
|
||||||
/* We use char because int might match the return type of a gcc2
|
|
||||||
builtin and then its argument prototype would still apply. */
|
|
||||||
-char clock_gettime ();
|
|
||||||
+char clock_gettyme ();
|
|
||||||
int
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
-clock_gettime ();
|
|
||||||
+clock_gettyme ();
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -20596,7 +20596,7 @@
|
|
||||||
ac_status=$?
|
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
(exit $ac_status); }; }; then
|
|
||||||
- ac_cv_search_clock_gettime="none required"
|
|
||||||
+ ac_cv_search_clock_gettyme="none required"
|
|
||||||
else
|
|
||||||
echo "$as_me: failed program was:" >&5
|
|
||||||
sed 's/^/| /' conftest.$ac_ext >&5
|
|
||||||
@@ -20604,7 +20604,7 @@
|
|
||||||
fi
|
|
||||||
rm -f conftest.err conftest.$ac_objext \
|
|
||||||
conftest$ac_exeext conftest.$ac_ext
|
|
||||||
-if test "$ac_cv_search_clock_gettime" = no; then
|
|
||||||
+if test "$ac_cv_search_clock_gettyme" = no; then
|
|
||||||
for ac_lib in rt posix4; do
|
|
||||||
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
|
|
||||||
cat >conftest.$ac_ext <<_ACEOF
|
|
||||||
@@ -20620,11 +20620,11 @@
|
|
||||||
#endif
|
|
||||||
/* We use char because int might match the return type of a gcc2
|
|
||||||
builtin and then its argument prototype would still apply. */
|
|
||||||
-char clock_gettime ();
|
|
||||||
+char clock_gettyme ();
|
|
||||||
int
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
-clock_gettime ();
|
|
||||||
+clock_gettyme ();
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -20651,7 +20651,7 @@
|
|
||||||
ac_status=$?
|
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
(exit $ac_status); }; }; then
|
|
||||||
- ac_cv_search_clock_gettime="-l$ac_lib"
|
|
||||||
+ ac_cv_search_clock_gettyme="-l$ac_lib"
|
|
||||||
break
|
|
||||||
else
|
|
||||||
echo "$as_me: failed program was:" >&5
|
|
||||||
@@ -20664,19 +20664,19 @@
|
|
||||||
fi
|
|
||||||
LIBS=$ac_func_search_save_LIBS
|
|
||||||
fi
|
|
||||||
-echo "$as_me:$LINENO: result: $ac_cv_search_clock_gettime" >&5
|
|
||||||
-echo "${ECHO_T}$ac_cv_search_clock_gettime" >&6
|
|
||||||
-if test "$ac_cv_search_clock_gettime" != no; then
|
|
||||||
- test "$ac_cv_search_clock_gettime" = "none required" || LIBS="$ac_cv_search_clock_gettime $LIBS"
|
|
||||||
+echo "$as_me:$LINENO: result: $ac_cv_search_clock_gettyme" >&5
|
|
||||||
+echo "${ECHO_T}$ac_cv_search_clock_gettyme" >&6
|
|
||||||
+if test "$ac_cv_search_clock_gettyme" != no; then
|
|
||||||
+ test "$ac_cv_search_clock_gettyme" = "none required" || LIBS="$ac_cv_search_clock_gettyme $LIBS"
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
- case "$ac_cv_search_clock_gettime" in
|
|
||||||
- -l*) LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime;;
|
|
||||||
+ case "$ac_cv_search_clock_gettyme" in
|
|
||||||
+ -l*) LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettyme;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
|
|
||||||
-for ac_func in clock_gettime
|
|
||||||
+for ac_func in clock_gettyme
|
|
||||||
do
|
|
||||||
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
|
||||||
echo "$as_me:$LINENO: checking for $ac_func" >&5
|
|
@ -1,16 +0,0 @@
|
|||||||
Patch by Robert Scheck <redhat@linuxnetz.de> for tar >= 1.15.1, which makes tar
|
|
||||||
rebuildable using gcc 4.
|
|
||||||
|
|
||||||
--- tar-1.15.1/tests/genfile.c 2004-09-08 13:50:20.000000000 +0200
|
|
||||||
+++ tar-1.15.1/tests/genfile.c.gcc4 2005-03-13 16:25:15.000000000 +0100
|
|
||||||
@@ -60,8 +60,8 @@
|
|
||||||
/* Block buffer for sparse file */
|
|
||||||
char *buffer;
|
|
||||||
|
|
||||||
-static const char *argp_program_version = "genfile (" PACKAGE ") " VERSION;
|
|
||||||
-static const char *argp_program_bug_address = "<" PACKAGE_BUGREPORT ">";
|
|
||||||
+const char *argp_program_version = "genfile (" PACKAGE ") " VERSION;
|
|
||||||
+const char *argp_program_bug_address = "<" PACKAGE_BUGREPORT ">";
|
|
||||||
static char doc[] = N_("genfile generates data files for GNU paxutils test suite");
|
|
||||||
|
|
||||||
static struct argp_option options[] = {
|
|
@ -1,121 +0,0 @@
|
|||||||
--- src/xheader.c.orig 2004-09-06 06:31:14.000000000 -0500
|
|
||||||
+++ src/xheader.c 2006-02-08 16:59:46.000000000 -0500
|
|
||||||
@@ -783,6 +783,32 @@ code_num (uintmax_t value, char const *k
|
|
||||||
xheader_print (xhdr, keyword, sbuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static bool
|
|
||||||
+decode_num (uintmax_t *num, char const *arg, uintmax_t maxval,
|
|
||||||
+ char const *keyword)
|
|
||||||
+{
|
|
||||||
+ uintmax_t u;
|
|
||||||
+ char *arg_lim;
|
|
||||||
+
|
|
||||||
+ if (! (ISDIGIT (*arg)
|
|
||||||
+ && (errno = 0, u = strtoumax (arg, &arg_lim, 10), !*arg_lim)))
|
|
||||||
+ {
|
|
||||||
+ ERROR ((0, 0, _("Malformed extended header: invalid %s=%s"),
|
|
||||||
+ keyword, arg));
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (! (u <= maxval && errno != ERANGE))
|
|
||||||
+ {
|
|
||||||
+ ERROR ((0, 0, _("Extended header %s=%s is out of range"),
|
|
||||||
+ keyword, arg));
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ *num = u;
|
|
||||||
+ return true;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
dummy_coder (struct tar_stat_info const *st __attribute__ ((unused)),
|
|
||||||
char const *keyword __attribute__ ((unused)),
|
|
||||||
@@ -821,7 +847,7 @@ static void
|
|
||||||
gid_decoder (struct tar_stat_info *st, char const *arg)
|
|
||||||
{
|
|
||||||
uintmax_t u;
|
|
||||||
- if (xstrtoumax (arg, NULL, 10, &u, "") == LONGINT_OK)
|
|
||||||
+ if (decode_num (&u, arg, TYPE_MAXIMUM (gid_t), "gid"))
|
|
||||||
st->stat.st_gid = u;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -903,7 +929,7 @@ static void
|
|
||||||
size_decoder (struct tar_stat_info *st, char const *arg)
|
|
||||||
{
|
|
||||||
uintmax_t u;
|
|
||||||
- if (xstrtoumax (arg, NULL, 10, &u, "") == LONGINT_OK)
|
|
||||||
+ if (decode_num (&u, arg, TYPE_MAXIMUM (off_t), "size"))
|
|
||||||
st->archive_file_size = st->stat.st_size = u;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -918,7 +944,7 @@ static void
|
|
||||||
uid_decoder (struct tar_stat_info *st, char const *arg)
|
|
||||||
{
|
|
||||||
uintmax_t u;
|
|
||||||
- if (xstrtoumax (arg, NULL, 10, &u, "") == LONGINT_OK)
|
|
||||||
+ if (decode_num (&u, arg, TYPE_MAXIMUM (uid_t), "uid"))
|
|
||||||
st->stat.st_uid = u;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -946,7 +972,7 @@ static void
|
|
||||||
sparse_size_decoder (struct tar_stat_info *st, char const *arg)
|
|
||||||
{
|
|
||||||
uintmax_t u;
|
|
||||||
- if (xstrtoumax (arg, NULL, 10, &u, "") == LONGINT_OK)
|
|
||||||
+ if (decode_num (&u, arg, TYPE_MAXIMUM (off_t), "GNU.sparse.size"))
|
|
||||||
st->stat.st_size = u;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -962,10 +988,10 @@ static void
|
|
||||||
sparse_numblocks_decoder (struct tar_stat_info *st, char const *arg)
|
|
||||||
{
|
|
||||||
uintmax_t u;
|
|
||||||
- if (xstrtoumax (arg, NULL, 10, &u, "") == LONGINT_OK)
|
|
||||||
+ if (decode_num (&u, arg, SIZE_MAX, "GNU.sparse.numblocks"))
|
|
||||||
{
|
|
||||||
st->sparse_map_size = u;
|
|
||||||
- st->sparse_map = calloc(st->sparse_map_size, sizeof(st->sparse_map[0]));
|
|
||||||
+ st->sparse_map = xcalloc (u, sizeof st->sparse_map[0]);
|
|
||||||
st->sparse_map_avail = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -982,8 +1008,14 @@ static void
|
|
||||||
sparse_offset_decoder (struct tar_stat_info *st, char const *arg)
|
|
||||||
{
|
|
||||||
uintmax_t u;
|
|
||||||
- if (xstrtoumax (arg, NULL, 10, &u, "") == LONGINT_OK)
|
|
||||||
+ if (decode_num (&u, arg, TYPE_MAXIMUM (off_t), "GNU.sparse.offset"))
|
|
||||||
+ {
|
|
||||||
+ if (st->sparse_map_avail < st->sparse_map_size)
|
|
||||||
st->sparse_map[st->sparse_map_avail].offset = u;
|
|
||||||
+ else
|
|
||||||
+ ERROR ((0, 0, _("Malformed extended header: excess %s=%s"),
|
|
||||||
+ "GNU.sparse.offset", arg));
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -998,15 +1030,13 @@ static void
|
|
||||||
sparse_numbytes_decoder (struct tar_stat_info *st, char const *arg)
|
|
||||||
{
|
|
||||||
uintmax_t u;
|
|
||||||
- if (xstrtoumax (arg, NULL, 10, &u, "") == LONGINT_OK)
|
|
||||||
+ if (decode_num (&u, arg, SIZE_MAX, "GNU.sparse.numbytes"))
|
|
||||||
{
|
|
||||||
if (st->sparse_map_avail == st->sparse_map_size)
|
|
||||||
- {
|
|
||||||
- st->sparse_map_size *= 2;
|
|
||||||
- st->sparse_map = xrealloc (st->sparse_map,
|
|
||||||
- st->sparse_map_size
|
|
||||||
- * sizeof st->sparse_map[0]);
|
|
||||||
- }
|
|
||||||
+ st->sparse_map = x2nrealloc (st->sparse_map,
|
|
||||||
+ &st->sparse_map_size,
|
|
||||||
+ sizeof st->sparse_map[0]);
|
|
||||||
+
|
|
||||||
st->sparse_map[st->sparse_map_avail++].numbytes = u;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,477 +0,0 @@
|
|||||||
--- tar-1.15.1/src/sparse.c.hugeSparse 2006-09-19 22:01:19.000000000 +0200
|
|
||||||
+++ tar-1.15.1/src/sparse.c 2006-09-19 22:08:33.000000000 +0200
|
|
||||||
@@ -21,6 +21,7 @@
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
struct tar_sparse_file;
|
|
||||||
+static bool sparse_select_optab (struct tar_sparse_file *file);
|
|
||||||
|
|
||||||
enum sparse_scan_state
|
|
||||||
{
|
|
||||||
@@ -47,47 +48,47 @@
|
|
||||||
{
|
|
||||||
int fd; /* File descriptor */
|
|
||||||
bool seekable; /* Is fd seekable? */
|
|
||||||
- size_t offset; /* Current offset in fd if seekable==false.
|
|
||||||
+ off_t offset; /* Current offset in fd if seekable==false.
|
|
||||||
Otherwise unused */
|
|
||||||
- size_t dumped_size; /* Number of bytes actually written
|
|
||||||
+ off_t dumped_size; /* Number of bytes actually written
|
|
||||||
to the archive */
|
|
||||||
struct tar_stat_info *stat_info; /* Information about the file */
|
|
||||||
- struct tar_sparse_optab *optab;
|
|
||||||
+ struct tar_sparse_optab const *optab;
|
|
||||||
void *closure; /* Any additional data optab calls might
|
|
||||||
- reqiure */
|
|
||||||
+ require */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Dump zeros to file->fd until offset is reached. It is used instead of
|
|
||||||
lseek if the output file is not seekable */
|
|
||||||
-static long
|
|
||||||
+static bool
|
|
||||||
dump_zeros (struct tar_sparse_file *file, off_t offset)
|
|
||||||
{
|
|
||||||
- char buf[BLOCKSIZE];
|
|
||||||
-
|
|
||||||
- if (offset - file->offset < 0)
|
|
||||||
+ static char const zero_buf[BLOCKSIZE];
|
|
||||||
+
|
|
||||||
+ if (offset < file->offset)
|
|
||||||
{
|
|
||||||
errno = EINVAL;
|
|
||||||
- return -1;
|
|
||||||
+ return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
- memset (buf, 0, sizeof buf);
|
|
||||||
while (file->offset < offset)
|
|
||||||
{
|
|
||||||
- size_t size = offset - file->offset;
|
|
||||||
- size_t wrbytes;
|
|
||||||
-
|
|
||||||
- if (size > sizeof buf)
|
|
||||||
- size = sizeof buf;
|
|
||||||
- wrbytes = write (file->fd, buf, size);
|
|
||||||
+ size_t size = (BLOCKSIZE < offset - file->offset
|
|
||||||
+ ? BLOCKSIZE
|
|
||||||
+ : offset - file->offset);
|
|
||||||
+ ssize_t wrbytes;
|
|
||||||
+
|
|
||||||
+ wrbytes = write (file->fd, zero_buf, size);
|
|
||||||
if (wrbytes <= 0)
|
|
||||||
{
|
|
||||||
if (wrbytes == 0)
|
|
||||||
errno = EINVAL;
|
|
||||||
- return -1;
|
|
||||||
+ return false;
|
|
||||||
}
|
|
||||||
file->offset += wrbytes;
|
|
||||||
}
|
|
||||||
- return file->offset;
|
|
||||||
+
|
|
||||||
+ return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
|
||||||
@@ -101,9 +102,14 @@
|
|
||||||
static bool
|
|
||||||
tar_sparse_init (struct tar_sparse_file *file)
|
|
||||||
{
|
|
||||||
- file->dumped_size = 0;
|
|
||||||
+ memset (file, 0, sizeof *file);
|
|
||||||
+
|
|
||||||
+ if (!sparse_select_optab (file))
|
|
||||||
+ return false;
|
|
||||||
+
|
|
||||||
if (file->optab->init)
|
|
||||||
return file->optab->init (file);
|
|
||||||
+
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -168,14 +174,9 @@
|
|
||||||
static bool
|
|
||||||
lseek_or_error (struct tar_sparse_file *file, off_t offset)
|
|
||||||
{
|
|
||||||
- off_t off;
|
|
||||||
-
|
|
||||||
- if (file->seekable)
|
|
||||||
- off = lseek (file->fd, offset, SEEK_SET);
|
|
||||||
- else
|
|
||||||
- off = dump_zeros (file, offset);
|
|
||||||
-
|
|
||||||
- if (off < 0)
|
|
||||||
+ if (file->seekable
|
|
||||||
+ ? lseek (file->fd, offset, SEEK_SET) < 0
|
|
||||||
+ : ! dump_zeros (file, offset))
|
|
||||||
{
|
|
||||||
seek_diag_details (file->stat_info->orig_file_name, offset);
|
|
||||||
return false;
|
|
||||||
@@ -187,7 +188,7 @@
|
|
||||||
it's made *entirely* of zeros, returning a 0 the instant it finds
|
|
||||||
something that is a nonzero, i.e., useful data. */
|
|
||||||
static bool
|
|
||||||
-zero_block_p (char *buffer, size_t size)
|
|
||||||
+zero_block_p (char const *buffer, size_t size)
|
|
||||||
{
|
|
||||||
while (size--)
|
|
||||||
if (*buffer++)
|
|
||||||
@@ -195,58 +196,46 @@
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
-#define clear_block(p) memset (p, 0, BLOCKSIZE);
|
|
||||||
-
|
|
||||||
-#define SPARSES_INIT_COUNT SPARSES_IN_SPARSE_HEADER
|
|
||||||
-
|
|
||||||
static void
|
|
||||||
-sparse_add_map (struct tar_sparse_file *file, struct sp_array *sp)
|
|
||||||
+sparse_add_map (struct tar_stat_info *st, struct sp_array const *sp)
|
|
||||||
{
|
|
||||||
- if (file->stat_info->sparse_map == NULL)
|
|
||||||
- {
|
|
||||||
- file->stat_info->sparse_map =
|
|
||||||
- xmalloc (SPARSES_INIT_COUNT * sizeof file->stat_info->sparse_map[0]);
|
|
||||||
- file->stat_info->sparse_map_size = SPARSES_INIT_COUNT;
|
|
||||||
- }
|
|
||||||
- else if (file->stat_info->sparse_map_avail == file->stat_info->sparse_map_size)
|
|
||||||
- {
|
|
||||||
- file->stat_info->sparse_map_size *= 2;
|
|
||||||
- file->stat_info->sparse_map =
|
|
||||||
- xrealloc (file->stat_info->sparse_map,
|
|
||||||
- file->stat_info->sparse_map_size
|
|
||||||
- * sizeof file->stat_info->sparse_map[0]);
|
|
||||||
- }
|
|
||||||
- file->stat_info->sparse_map[file->stat_info->sparse_map_avail++] = *sp;
|
|
||||||
+ struct sp_array *sparse_map = st->sparse_map;
|
|
||||||
+ size_t avail = st->sparse_map_avail;
|
|
||||||
+ if (avail == st->sparse_map_size)
|
|
||||||
+ st->sparse_map = sparse_map =
|
|
||||||
+ x2nrealloc (sparse_map, &st->sparse_map_size, sizeof *sparse_map);
|
|
||||||
+ sparse_map[avail] = *sp;
|
|
||||||
+ st->sparse_map_avail = avail + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Scan the sparse file and create its map */
|
|
||||||
static bool
|
|
||||||
sparse_scan_file (struct tar_sparse_file *file)
|
|
||||||
{
|
|
||||||
- static char buffer[BLOCKSIZE];
|
|
||||||
+ struct tar_stat_info *st = file->stat_info;
|
|
||||||
+ int fd = file->fd;
|
|
||||||
+ char buffer[BLOCKSIZE];
|
|
||||||
size_t count;
|
|
||||||
off_t offset = 0;
|
|
||||||
struct sp_array sp = {0, 0};
|
|
||||||
|
|
||||||
if (!lseek_or_error (file, 0))
|
|
||||||
return false;
|
|
||||||
- clear_block (buffer);
|
|
||||||
-
|
|
||||||
- file->stat_info->sparse_map_avail = 0;
|
|
||||||
- file->stat_info->archive_file_size = 0;
|
|
||||||
|
|
||||||
+ st->archive_file_size = 0;
|
|
||||||
+
|
|
||||||
if (!tar_sparse_scan (file, scan_begin, NULL))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
- while ((count = safe_read (file->fd, buffer, sizeof buffer)) != 0
|
|
||||||
+ while ((count = safe_read (fd, buffer, sizeof buffer)) != 0
|
|
||||||
&& count != SAFE_READ_ERROR)
|
|
||||||
{
|
|
||||||
- /* Analize the block */
|
|
||||||
+ /* Analyze the block. */
|
|
||||||
if (zero_block_p (buffer, count))
|
|
||||||
{
|
|
||||||
if (sp.numbytes)
|
|
||||||
{
|
|
||||||
- sparse_add_map (file, &sp);
|
|
||||||
+ sparse_add_map (st, &sp);
|
|
||||||
sp.numbytes = 0;
|
|
||||||
if (!tar_sparse_scan (file, scan_block, NULL))
|
|
||||||
return false;
|
|
||||||
@@ -257,26 +246,25 @@
|
|
||||||
if (sp.numbytes == 0)
|
|
||||||
sp.offset = offset;
|
|
||||||
sp.numbytes += count;
|
|
||||||
- file->stat_info->archive_file_size += count;
|
|
||||||
+ st->archive_file_size += count;
|
|
||||||
if (!tar_sparse_scan (file, scan_block, buffer))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
offset += count;
|
|
||||||
- clear_block (buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sp.numbytes == 0)
|
|
||||||
sp.offset = offset;
|
|
||||||
|
|
||||||
- sparse_add_map (file, &sp);
|
|
||||||
- file->stat_info->archive_file_size += count;
|
|
||||||
+ sparse_add_map (st, &sp);
|
|
||||||
+ st->archive_file_size += count;
|
|
||||||
return tar_sparse_scan (file, scan_end, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static struct tar_sparse_optab oldgnu_optab;
|
|
||||||
-static struct tar_sparse_optab star_optab;
|
|
||||||
-static struct tar_sparse_optab pax_optab;
|
|
||||||
+static struct tar_sparse_optab const oldgnu_optab;
|
|
||||||
+static struct tar_sparse_optab const star_optab;
|
|
||||||
+static struct tar_sparse_optab const pax_optab;
|
|
||||||
|
|
||||||
static bool
|
|
||||||
sparse_select_optab (struct tar_sparse_file *file)
|
|
||||||
@@ -321,18 +309,18 @@
|
|
||||||
size_t bytes_read;
|
|
||||||
|
|
||||||
blk = find_next_block ();
|
|
||||||
- memset (blk->buffer, 0, BLOCKSIZE);
|
|
||||||
bytes_read = safe_read (file->fd, blk->buffer, bufsize);
|
|
||||||
if (bytes_read == SAFE_READ_ERROR)
|
|
||||||
{
|
|
||||||
read_diag_details (file->stat_info->orig_file_name,
|
|
||||||
- file->stat_info->sparse_map[i].offset
|
|
||||||
- + file->stat_info->sparse_map[i].numbytes
|
|
||||||
- - bytes_left,
|
|
||||||
- bufsize);
|
|
||||||
+ (file->stat_info->sparse_map[i].offset
|
|
||||||
+ + file->stat_info->sparse_map[i].numbytes
|
|
||||||
+ - bytes_left),
|
|
||||||
+ bufsize);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ memset (blk->buffer + bytes_read, 0, BLOCKSIZE - bytes_read);
|
|
||||||
bytes_left -= bytes_read;
|
|
||||||
file->dumped_size += bytes_read;
|
|
||||||
set_next_block_after (blk);
|
|
||||||
@@ -391,14 +379,12 @@
|
|
||||||
bool rc;
|
|
||||||
struct tar_sparse_file file;
|
|
||||||
|
|
||||||
+ if (!tar_sparse_init (&file))
|
|
||||||
+ return dump_status_not_implemented;
|
|
||||||
+
|
|
||||||
file.stat_info = st;
|
|
||||||
file.fd = fd;
|
|
||||||
file.seekable = true; /* File *must* be seekable for dump to work */
|
|
||||||
- file.offset = 0;
|
|
||||||
-
|
|
||||||
- if (!sparse_select_optab (&file)
|
|
||||||
- || !tar_sparse_init (&file))
|
|
||||||
- return dump_status_not_implemented;
|
|
||||||
|
|
||||||
rc = sparse_scan_file (&file);
|
|
||||||
if (rc && file.optab->dump_region)
|
|
||||||
@@ -414,7 +400,7 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- pad_archive(file.stat_info->archive_file_size - file.dumped_size);
|
|
||||||
+ pad_archive (file.stat_info->archive_file_size - file.dumped_size);
|
|
||||||
return (tar_sparse_done (&file) && rc) ? dump_status_ok : dump_status_short;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -432,7 +418,7 @@
|
|
||||||
{
|
|
||||||
struct tar_sparse_file file;
|
|
||||||
|
|
||||||
- if (!sparse_select_optab (&file))
|
|
||||||
+ if (!tar_sparse_init (&file))
|
|
||||||
return false;
|
|
||||||
file.stat_info = st;
|
|
||||||
return tar_sparse_member_p (&file);
|
|
||||||
@@ -443,7 +429,7 @@
|
|
||||||
{
|
|
||||||
struct tar_sparse_file file;
|
|
||||||
|
|
||||||
- if (!sparse_select_optab (&file))
|
|
||||||
+ if (!tar_sparse_init (&file))
|
|
||||||
return false;
|
|
||||||
file.stat_info = st;
|
|
||||||
return tar_sparse_fixup_header (&file);
|
|
||||||
@@ -456,14 +442,13 @@
|
|
||||||
struct tar_sparse_file file;
|
|
||||||
size_t i;
|
|
||||||
|
|
||||||
+ if (!tar_sparse_init (&file))
|
|
||||||
+ return dump_status_not_implemented;
|
|
||||||
+
|
|
||||||
file.stat_info = st;
|
|
||||||
file.fd = fd;
|
|
||||||
file.seekable = lseek (fd, 0, SEEK_SET) == 0;
|
|
||||||
file.offset = 0;
|
|
||||||
-
|
|
||||||
- if (!sparse_select_optab (&file)
|
|
||||||
- || !tar_sparse_init (&file))
|
|
||||||
- return dump_status_not_implemented;
|
|
||||||
|
|
||||||
rc = tar_sparse_decode_header (&file);
|
|
||||||
for (i = 0; rc && i < file.stat_info->sparse_map_avail; i++)
|
|
||||||
@@ -478,21 +463,18 @@
|
|
||||||
bool rc = true;
|
|
||||||
struct tar_sparse_file file;
|
|
||||||
|
|
||||||
+ if (!tar_sparse_init (&file))
|
|
||||||
+ return dump_status_not_implemented;
|
|
||||||
+
|
|
||||||
file.stat_info = st;
|
|
||||||
file.fd = -1;
|
|
||||||
|
|
||||||
- if (!sparse_select_optab (&file)
|
|
||||||
- || !tar_sparse_init (&file))
|
|
||||||
- return dump_status_not_implemented;
|
|
||||||
-
|
|
||||||
rc = tar_sparse_decode_header (&file);
|
|
||||||
skip_file (file.stat_info->archive_file_size);
|
|
||||||
return (tar_sparse_done (&file) && rc) ? dump_status_ok : dump_status_short;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
-static char diff_buffer[BLOCKSIZE];
|
|
||||||
-
|
|
||||||
static bool
|
|
||||||
check_sparse_region (struct tar_sparse_file *file, off_t beg, off_t end)
|
|
||||||
{
|
|
||||||
@@ -502,11 +484,9 @@
|
|
||||||
while (beg < end)
|
|
||||||
{
|
|
||||||
size_t bytes_read;
|
|
||||||
- size_t rdsize = end - beg;
|
|
||||||
+ size_t rdsize = BLOCKSIZE < end - beg ? BLOCKSIZE : end - beg;
|
|
||||||
+ char diff_buffer[BLOCKSIZE];
|
|
||||||
|
|
||||||
- if (rdsize > BLOCKSIZE)
|
|
||||||
- rdsize = BLOCKSIZE;
|
|
||||||
- clear_block (diff_buffer);
|
|
||||||
bytes_read = safe_read (file->fd, diff_buffer, rdsize);
|
|
||||||
if (bytes_read == SAFE_READ_ERROR)
|
|
||||||
{
|
|
||||||
@@ -518,7 +498,7 @@
|
|
||||||
if (!zero_block_p (diff_buffer, bytes_read))
|
|
||||||
{
|
|
||||||
report_difference (file->stat_info,
|
|
||||||
- _("File fragment at %lu is not a hole"), beg);
|
|
||||||
+ _("File fragment at %lu is not a hole"), beg);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -539,6 +519,7 @@
|
|
||||||
{
|
|
||||||
size_t bytes_read;
|
|
||||||
size_t rdsize = (size_left > BLOCKSIZE) ? BLOCKSIZE : size_left;
|
|
||||||
+ char diff_buffer[BLOCKSIZE];
|
|
||||||
|
|
||||||
union block *blk = find_next_block ();
|
|
||||||
if (!blk)
|
|
||||||
@@ -551,9 +532,9 @@
|
|
||||||
if (bytes_read == SAFE_READ_ERROR)
|
|
||||||
{
|
|
||||||
read_diag_details (file->stat_info->orig_file_name,
|
|
||||||
- file->stat_info->sparse_map[i].offset
|
|
||||||
- + file->stat_info->sparse_map[i].numbytes
|
|
||||||
- - size_left,
|
|
||||||
+ (file->stat_info->sparse_map[i].offset
|
|
||||||
+ + file->stat_info->sparse_map[i].numbytes
|
|
||||||
+ - size_left),
|
|
||||||
rdsize);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
@@ -576,13 +557,12 @@
|
|
||||||
size_t i;
|
|
||||||
off_t offset = 0;
|
|
||||||
|
|
||||||
+ if (!tar_sparse_init (&file))
|
|
||||||
+ return dump_status_not_implemented;
|
|
||||||
+
|
|
||||||
file.stat_info = st;
|
|
||||||
file.fd = fd;
|
|
||||||
|
|
||||||
- if (!sparse_select_optab (&file)
|
|
||||||
- || !tar_sparse_init (&file))
|
|
||||||
- return dump_status_not_implemented;
|
|
||||||
-
|
|
||||||
rc = tar_sparse_decode_header (&file);
|
|
||||||
for (i = 0; rc && i < file.stat_info->sparse_map_avail; i++)
|
|
||||||
{
|
|
||||||
@@ -647,7 +627,7 @@
|
|
||||||
|| file->stat_info->archive_file_size < 0)
|
|
||||||
return add_fail;
|
|
||||||
|
|
||||||
- sparse_add_map (file, &sp);
|
|
||||||
+ sparse_add_map (file->stat_info, &sp);
|
|
||||||
return add_ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -658,7 +638,7 @@
|
|
||||||
which actually contains archived size. The following fixes it */
|
|
||||||
file->stat_info->archive_file_size = file->stat_info->stat.st_size;
|
|
||||||
file->stat_info->stat.st_size =
|
|
||||||
- OFF_FROM_HEADER (current_header->oldgnu_header.realsize);
|
|
||||||
+ OFF_FROM_HEADER (current_header->oldgnu_header.realsize);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -669,7 +649,7 @@
|
|
||||||
size_t i;
|
|
||||||
union block *h = current_header;
|
|
||||||
int ext_p;
|
|
||||||
- static enum oldgnu_add_status rc;
|
|
||||||
+ enum oldgnu_add_status rc;
|
|
||||||
|
|
||||||
file->stat_info->sparse_map_avail = 0;
|
|
||||||
for (i = 0; i < SPARSES_IN_OLDGNU_HEADER; i++)
|
|
||||||
@@ -756,7 +736,7 @@
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static struct tar_sparse_optab oldgnu_optab = {
|
|
||||||
+static struct tar_sparse_optab const oldgnu_optab = {
|
|
||||||
NULL, /* No init function */
|
|
||||||
NULL, /* No done function */
|
|
||||||
oldgnu_sparse_member_p,
|
|
||||||
@@ -795,7 +775,7 @@
|
|
||||||
size_t i;
|
|
||||||
union block *h = current_header;
|
|
||||||
int ext_p;
|
|
||||||
- static enum oldgnu_add_status rc;
|
|
||||||
+ enum oldgnu_add_status rc = add_ok;
|
|
||||||
|
|
||||||
file->stat_info->sparse_map_avail = 0;
|
|
||||||
|
|
||||||
@@ -837,7 +817,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
-static struct tar_sparse_optab star_optab = {
|
|
||||||
+static struct tar_sparse_optab const star_optab = {
|
|
||||||
NULL, /* No init function */
|
|
||||||
NULL, /* No done function */
|
|
||||||
star_sparse_member_p,
|
|
||||||
@@ -864,7 +844,7 @@
|
|
||||||
static bool
|
|
||||||
pax_sparse_member_p (struct tar_sparse_file *file)
|
|
||||||
{
|
|
||||||
- return file->stat_info->archive_file_size != file->stat_info->stat.st_size;
|
|
||||||
+ return file->stat_info->sparse_map_avail > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
|
||||||
@@ -890,7 +870,7 @@
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static struct tar_sparse_optab pax_optab = {
|
|
||||||
+static struct tar_sparse_optab const pax_optab = {
|
|
||||||
NULL, /* No init function */
|
|
||||||
NULL, /* No done function */
|
|
||||||
pax_sparse_member_p,
|
|
||||||
@@ -901,4 +881,3 @@
|
|
||||||
sparse_dump_region,
|
|
||||||
sparse_extract_region,
|
|
||||||
};
|
|
||||||
-
|
|
@ -1,12 +0,0 @@
|
|||||||
--- tar-1.15.1/src/create.c.incompatibilities 2006-09-19 22:23:32.000000000 +0200
|
|
||||||
+++ tar-1.15.1/src/create.c 2006-09-19 22:24:02.000000000 +0200
|
|
||||||
@@ -254,7 +254,8 @@
|
|
||||||
&& S_IROTH == TOREAD && S_IWOTH == TOWRITE && S_IXOTH == TOEXEC
|
|
||||||
&& archive_format != POSIX_FORMAT
|
|
||||||
&& archive_format != USTAR_FORMAT
|
|
||||||
- && archive_format != GNU_FORMAT)
|
|
||||||
+ && archive_format != GNU_FORMAT
|
|
||||||
+ && archive_format != OLDGNU_FORMAT)
|
|
||||||
{
|
|
||||||
negative = v < 0;
|
|
||||||
u = v;
|
|
@ -1,162 +0,0 @@
|
|||||||
--- tar-1.15.1/src/sparse.c.lseek 2004-09-06 13:30:57.000000000 +0200
|
|
||||||
+++ tar-1.15.1/src/sparse.c 2005-04-15 10:33:17.990735744 +0200
|
|
||||||
@@ -46,6 +46,9 @@
|
|
||||||
struct tar_sparse_file
|
|
||||||
{
|
|
||||||
int fd; /* File descriptor */
|
|
||||||
+ bool seekable; /* Is fd seekable? */
|
|
||||||
+ size_t offset; /* Current offset in fd if seekable==false.
|
|
||||||
+ Otherwise unused */
|
|
||||||
size_t dumped_size; /* Number of bytes actually written
|
|
||||||
to the archive */
|
|
||||||
struct tar_stat_info *stat_info; /* Information about the file */
|
|
||||||
@@ -54,6 +57,39 @@
|
|
||||||
reqiure */
|
|
||||||
};
|
|
||||||
|
|
||||||
+/* Dump zeros to file->fd until offset is reached. It is used instead of
|
|
||||||
+ lseek if the output file is not seekable */
|
|
||||||
+static long
|
|
||||||
+dump_zeros (struct tar_sparse_file *file, off_t offset)
|
|
||||||
+{
|
|
||||||
+ char buf[BLOCKSIZE];
|
|
||||||
+
|
|
||||||
+ if (offset - file->offset < 0)
|
|
||||||
+ {
|
|
||||||
+ errno = EINVAL;
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ memset (buf, 0, sizeof buf);
|
|
||||||
+ while (file->offset < offset)
|
|
||||||
+ {
|
|
||||||
+ size_t size = offset - file->offset;
|
|
||||||
+ size_t wrbytes;
|
|
||||||
+
|
|
||||||
+ if (size > sizeof buf)
|
|
||||||
+ size = sizeof buf;
|
|
||||||
+ wrbytes = write (file->fd, buf, size);
|
|
||||||
+ if (wrbytes <= 0)
|
|
||||||
+ {
|
|
||||||
+ if (wrbytes == 0)
|
|
||||||
+ errno = EINVAL;
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+ file->offset += wrbytes;
|
|
||||||
+ }
|
|
||||||
+ return file->offset;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static bool
|
|
||||||
tar_sparse_member_p (struct tar_sparse_file *file)
|
|
||||||
{
|
|
||||||
@@ -130,9 +166,16 @@
|
|
||||||
|
|
||||||
|
|
||||||
static bool
|
|
||||||
-lseek_or_error (struct tar_sparse_file *file, off_t offset, int whence)
|
|
||||||
+lseek_or_error (struct tar_sparse_file *file, off_t offset)
|
|
||||||
{
|
|
||||||
- if (lseek (file->fd, offset, whence) < 0)
|
|
||||||
+ off_t off;
|
|
||||||
+
|
|
||||||
+ if (file->seekable)
|
|
||||||
+ off = lseek (file->fd, offset, SEEK_SET);
|
|
||||||
+ else
|
|
||||||
+ off = dump_zeros (file, offset);
|
|
||||||
+
|
|
||||||
+ if (off < 0)
|
|
||||||
{
|
|
||||||
seek_diag_details (file->stat_info->orig_file_name, offset);
|
|
||||||
return false;
|
|
||||||
@@ -182,10 +225,10 @@
|
|
||||||
{
|
|
||||||
static char buffer[BLOCKSIZE];
|
|
||||||
size_t count;
|
|
||||||
- size_t offset = 0;
|
|
||||||
+ off_t offset = 0;
|
|
||||||
struct sp_array sp = {0, 0};
|
|
||||||
|
|
||||||
- if (!lseek_or_error (file, 0, SEEK_SET))
|
|
||||||
+ if (!lseek_or_error (file, 0))
|
|
||||||
return false;
|
|
||||||
clear_block (buffer);
|
|
||||||
|
|
||||||
@@ -269,8 +312,7 @@
|
|
||||||
union block *blk;
|
|
||||||
off_t bytes_left = file->stat_info->sparse_map[i].numbytes;
|
|
||||||
|
|
||||||
- if (!lseek_or_error (file, file->stat_info->sparse_map[i].offset,
|
|
||||||
- SEEK_SET))
|
|
||||||
+ if (!lseek_or_error (file, file->stat_info->sparse_map[i].offset))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
while (bytes_left > 0)
|
|
||||||
@@ -304,8 +346,7 @@
|
|
||||||
{
|
|
||||||
size_t write_size;
|
|
||||||
|
|
||||||
- if (!lseek_or_error (file, file->stat_info->sparse_map[i].offset,
|
|
||||||
- SEEK_SET))
|
|
||||||
+ if (!lseek_or_error (file, file->stat_info->sparse_map[i].offset))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
write_size = file->stat_info->sparse_map[i].numbytes;
|
|
||||||
@@ -313,7 +354,7 @@
|
|
||||||
if (write_size == 0)
|
|
||||||
{
|
|
||||||
/* Last block of the file is a hole */
|
|
||||||
- if (sys_truncate (file->fd))
|
|
||||||
+ if (file->seekable && sys_truncate (file->fd))
|
|
||||||
truncate_warn (file->stat_info->orig_file_name);
|
|
||||||
}
|
|
||||||
else while (write_size > 0)
|
|
||||||
@@ -330,6 +371,7 @@
|
|
||||||
count = full_write (file->fd, blk->buffer, wrbytes);
|
|
||||||
write_size -= count;
|
|
||||||
file->dumped_size += count;
|
|
||||||
+ file->offset += count;
|
|
||||||
if (count != wrbytes)
|
|
||||||
{
|
|
||||||
write_error_details (file->stat_info->orig_file_name,
|
|
||||||
@@ -351,7 +393,9 @@
|
|
||||||
|
|
||||||
file.stat_info = st;
|
|
||||||
file.fd = fd;
|
|
||||||
-
|
|
||||||
+ file.seekable = true; /* File *must* be seekable for dump to work */
|
|
||||||
+ file.offset = 0;
|
|
||||||
+
|
|
||||||
if (!sparse_select_optab (&file)
|
|
||||||
|| !tar_sparse_init (&file))
|
|
||||||
return dump_status_not_implemented;
|
|
||||||
@@ -414,7 +458,9 @@
|
|
||||||
|
|
||||||
file.stat_info = st;
|
|
||||||
file.fd = fd;
|
|
||||||
-
|
|
||||||
+ file.seekable = lseek (fd, 0, SEEK_SET) == 0;
|
|
||||||
+ file.offset = 0;
|
|
||||||
+
|
|
||||||
if (!sparse_select_optab (&file)
|
|
||||||
|| !tar_sparse_init (&file))
|
|
||||||
return dump_status_not_implemented;
|
|
||||||
@@ -450,7 +496,7 @@
|
|
||||||
static bool
|
|
||||||
check_sparse_region (struct tar_sparse_file *file, off_t beg, off_t end)
|
|
||||||
{
|
|
||||||
- if (!lseek_or_error (file, beg, SEEK_SET))
|
|
||||||
+ if (!lseek_or_error (file, beg))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
while (beg < end)
|
|
||||||
@@ -486,8 +532,7 @@
|
|
||||||
{
|
|
||||||
size_t size_left;
|
|
||||||
|
|
||||||
- if (!lseek_or_error (file, file->stat_info->sparse_map[i].offset,
|
|
||||||
- SEEK_SET))
|
|
||||||
+ if (!lseek_or_error (file, file->stat_info->sparse_map[i].offset))
|
|
||||||
return false;
|
|
||||||
size_left = file->stat_info->sparse_map[i].numbytes;
|
|
||||||
while (size_left > 0)
|
|
@ -1,46 +0,0 @@
|
|||||||
--- tar-1.15.1/tests/testsuite.at.makeCheck 2004-12-21 13:41:40.000000000 +0100
|
|
||||||
+++ tar-1.15.1/tests/testsuite.at 2005-07-26 14:56:10.000000000 +0200
|
|
||||||
@@ -64,7 +64,7 @@
|
|
||||||
|
|
||||||
m4_include([options.at])
|
|
||||||
|
|
||||||
-m4_include([append.at])
|
|
||||||
+#m4_include([append.at])
|
|
||||||
|
|
||||||
m4_include([delete01.at])
|
|
||||||
m4_include([delete02.at])
|
|
||||||
@@ -87,7 +87,7 @@
|
|
||||||
m4_include([link01.at])
|
|
||||||
|
|
||||||
m4_include([listed01.at])
|
|
||||||
-m4_include([listed02.at])
|
|
||||||
+#m4_include([listed02.at])
|
|
||||||
|
|
||||||
m4_include([longv7.at])
|
|
||||||
|
|
||||||
--- tar-1.15.1/tests/pipe.at.makeCheck 2004-12-21 13:51:40.000000000 +0100
|
|
||||||
+++ tar-1.15.1/tests/pipe.at 2005-07-26 14:54:33.000000000 +0200
|
|
||||||
@@ -34,7 +34,7 @@
|
|
||||||
mkdir directory
|
|
||||||
genfile --length 10240 --pattern zeros > directory/file1
|
|
||||||
genfile --length 13 > directory/file2
|
|
||||||
-tar cf archive directory
|
|
||||||
+tar cf archive directory/file1 directory/file2
|
|
||||||
mv directory orig
|
|
||||||
cat archive | tar xfv -
|
|
||||||
echo "separator"
|
|
||||||
@@ -42,11 +42,10 @@
|
|
||||||
echo "separator"
|
|
||||||
cmp orig/file2 directory/file2],
|
|
||||||
[0],
|
|
||||||
-[directory/
|
|
||||||
-directory/file1
|
|
||||||
+[directory/file1
|
|
||||||
directory/file2
|
|
||||||
separator
|
|
||||||
separator
|
|
||||||
])
|
|
||||||
|
|
||||||
-AT_CLEANUP
|
|
||||||
\ No newline at end of file
|
|
||||||
+AT_CLEANUP
|
|
@ -1,59 +0,0 @@
|
|||||||
--- tar-1.15.1/src/common.h.mangling 2006-12-04 12:47:40.000000000 +0100
|
|
||||||
+++ tar-1.15.1/src/common.h 2006-12-04 12:47:40.000000000 +0100
|
|
||||||
@@ -124,6 +124,9 @@
|
|
||||||
|
|
||||||
GLOBAL bool absolute_names_option;
|
|
||||||
|
|
||||||
+/* Allow GNUTYPE_NAMES type? */
|
|
||||||
+GLOBAL bool allow_name_mangling_option;
|
|
||||||
+
|
|
||||||
/* Display file times in UTC */
|
|
||||||
GLOBAL bool utc_option;
|
|
||||||
|
|
||||||
--- tar-1.15.1/src/extract.c.mangling 2006-12-04 12:47:40.000000000 +0100
|
|
||||||
+++ tar-1.15.1/src/extract.c 2006-12-04 12:47:40.000000000 +0100
|
|
||||||
@@ -1171,7 +1171,13 @@
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GNUTYPE_NAMES:
|
|
||||||
- extract_mangle ();
|
|
||||||
+ if (allow_name_mangling_option) {
|
|
||||||
+ extract_mangle ();
|
|
||||||
+ }
|
|
||||||
+ else {
|
|
||||||
+ ERROR ((0, 0, _("GNUTYPE_NAMES mangling ignored")));
|
|
||||||
+ skip_member ();
|
|
||||||
+ }
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GNUTYPE_MULTIVOL:
|
|
||||||
--- tar-1.15.1/src/tar.c.mangling 2006-12-04 12:47:40.000000000 +0100
|
|
||||||
+++ tar-1.15.1/src/tar.c 2006-12-04 12:55:35.000000000 +0100
|
|
||||||
@@ -182,6 +182,7 @@
|
|
||||||
{
|
|
||||||
ACLS_OPTION = CHAR_MAX + 1,
|
|
||||||
ANCHORED_OPTION,
|
|
||||||
+ ALLOW_NAME_MANGLING_OPTION,
|
|
||||||
ATIME_PRESERVE_OPTION,
|
|
||||||
BACKUP_OPTION,
|
|
||||||
CHECKPOINT_OPTION,
|
|
||||||
@@ -546,6 +547,8 @@
|
|
||||||
|
|
||||||
{NULL, 'o', 0, 0,
|
|
||||||
N_("when creating, same as --old-archive. When extracting, same as --no-same-owner"), 91 },
|
|
||||||
+ {"allow-name-mangling", ALLOW_NAME_MANGLING_OPTION, 0, 0,
|
|
||||||
+ N_("when creating, allow GNUTYPE_NAMES mangling -- considered dangerous"), 91 },
|
|
||||||
|
|
||||||
{NULL, 0, NULL, 0,
|
|
||||||
N_("Other options:"), 100 },
|
|
||||||
@@ -931,6 +934,10 @@
|
|
||||||
case 'Z':
|
|
||||||
set_use_compress_program_option ("compress");
|
|
||||||
break;
|
|
||||||
+
|
|
||||||
+ case ALLOW_NAME_MANGLING_OPTION:
|
|
||||||
+ allow_name_mangling_option = true;
|
|
||||||
+ break;
|
|
||||||
|
|
||||||
case ANCHORED_OPTION:
|
|
||||||
args->exclude_options |= EXCLUDE_ANCHORED;
|
|
@ -1,11 +0,0 @@
|
|||||||
--- tar-1.15.1/src/create.c.newerOption 2005-08-15 15:53:27.000000000 +0000
|
|
||||||
+++ tar-1.15.1/src/create.c 2005-08-15 15:53:51.000000000 +0000
|
|
||||||
@@ -1387,7 +1387,7 @@
|
|
||||||
&& OLDER_STAT_TIME (st->stat, m)
|
|
||||||
&& (!after_date_option || OLDER_STAT_TIME (st->stat, c)))
|
|
||||||
{
|
|
||||||
- if (!incremental_option)
|
|
||||||
+ if (!incremental_option && verbose_option)
|
|
||||||
WARN ((0, 0, _("%s: file is unchanged; not dumped"),
|
|
||||||
quotearg_colon (p)));
|
|
||||||
return;
|
|
@ -1,14 +0,0 @@
|
|||||||
--- tar-1.15.1/src/tar.c.optionsOrder 2006-09-19 21:39:41.000000000 +0200
|
|
||||||
+++ tar-1.15.1/src/tar.c 2006-09-19 21:40:35.000000000 +0200
|
|
||||||
@@ -617,9 +617,9 @@
|
|
||||||
|
|
||||||
switch (key)
|
|
||||||
{
|
|
||||||
- case 1:
|
|
||||||
+ case ARGP_KEY_ARG:
|
|
||||||
/* File name or non-parsed option, because of ARGP_IN_ORDER */
|
|
||||||
- name_add (optarg);
|
|
||||||
+ name_add (arg);
|
|
||||||
args->input_files++;
|
|
||||||
break;
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
|||||||
--- tar-1.15.1/src/create.c.padCorrectly 2005-11-04 10:18:08.000000000 -0500
|
|
||||||
+++ tar-1.15.1/src/create.c 2005-11-04 10:21:05.000000000 -0500
|
|
||||||
@@ -877,8 +877,8 @@
|
|
||||||
return dump_status_short;
|
|
||||||
}
|
|
||||||
size_left -= count;
|
|
||||||
-
|
|
||||||
- set_next_block_after (blk + (bufsize - 1) / BLOCKSIZE);
|
|
||||||
+ if (count)
|
|
||||||
+ set_next_block_after (blk + (bufsize - 1) / BLOCKSIZE);
|
|
||||||
|
|
||||||
if (count != bufsize)
|
|
||||||
{
|
|
||||||
@@ -892,7 +892,7 @@
|
|
||||||
STRINGIFY_BIGINT (size_left, buf)));
|
|
||||||
if (! ignore_failed_read_option)
|
|
||||||
exit_status = TAREXIT_FAILURE;
|
|
||||||
- pad_archive (size_left);
|
|
||||||
+ pad_archive (size_left - (bufsize-count));
|
|
||||||
return dump_status_short;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,42 +0,0 @@
|
|||||||
--- tar-1.15.1/src/extract.c.permissions 2004-12-21 10:55:12.000000000 +0100
|
|
||||||
+++ tar-1.15.1/src/extract.c 2006-09-20 12:16:08.000000000 +0200
|
|
||||||
@@ -404,7 +404,7 @@
|
|
||||||
invert_permissions is zero, because
|
|
||||||
repair_delayed_set_stat may need to update the struct. */
|
|
||||||
delay_set_stat (file_name,
|
|
||||||
- ¤t_stat_info.stat /* ignored */,
|
|
||||||
+ ¤t_stat_info.stat,
|
|
||||||
invert_permissions, INTERDIR_PERMSTATUS);
|
|
||||||
|
|
||||||
print_for_mkdir (file_name, cursor - file_name, mode);
|
|
||||||
@@ -1065,7 +1065,7 @@
|
|
||||||
}
|
|
||||||
if (S_ISDIR (st.st_mode))
|
|
||||||
{
|
|
||||||
- mode = st.st_mode & ~ current_umask;
|
|
||||||
+ mode = st.st_mode;
|
|
||||||
goto directory_exists;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1088,11 +1088,16 @@
|
|
||||||
if (status == 0
|
|
||||||
|| old_files_option == DEFAULT_OLD_FILES
|
|
||||||
|| old_files_option == OVERWRITE_OLD_FILES)
|
|
||||||
- delay_set_stat (file_name, ¤t_stat_info.stat,
|
|
||||||
- MODE_RWX & (mode ^ current_stat_info.stat.st_mode),
|
|
||||||
- (status == 0
|
|
||||||
- ? ARCHIVED_PERMSTATUS
|
|
||||||
- : UNKNOWN_PERMSTATUS));
|
|
||||||
+ {
|
|
||||||
+ if (status == 0)
|
|
||||||
+ delay_set_stat (file_name, ¤t_stat_info.stat,
|
|
||||||
+ MODE_RWX & (mode ^ current_stat_info.stat.st_mode),
|
|
||||||
+ ARCHIVED_PERMSTATUS);
|
|
||||||
+ else /* For an already existing directory, invert_perms must be 0 */
|
|
||||||
+ delay_set_stat (file_name, ¤t_stat_info.stat,
|
|
||||||
+ 0,
|
|
||||||
+ UNKNOWN_PERMSTATUS);
|
|
||||||
+ }
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GNUTYPE_VOLHDR:
|
|
@ -1,36 +0,0 @@
|
|||||||
--- tar-1.15.1/src/create.c.sparseTotals 2005-07-27 11:10:38.000000000 +0200
|
|
||||||
+++ tar-1.15.1/src/create.c 2005-07-27 11:10:50.000000000 +0200
|
|
||||||
@@ -332,16 +332,20 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
-/* A file is not dumpable if
|
|
||||||
+/* A file is considered dumpable if it is sparse and both --sparse and --totals
|
|
||||||
+ are specified.
|
|
||||||
+ Otherwise, it is dumpable unless any of the following conditions occur:
|
|
||||||
+
|
|
||||||
a) it is empty *and* world-readable, or
|
|
||||||
b) current archive is /dev/null */
|
|
||||||
|
|
||||||
bool
|
|
||||||
file_dumpable_p (struct tar_stat_info *st)
|
|
||||||
{
|
|
||||||
- return !(dev_null_output
|
|
||||||
- || (st->archive_file_size == 0
|
|
||||||
- && (st->stat.st_mode & MODE_R) == MODE_R));
|
|
||||||
+ if (dev_null_output)
|
|
||||||
+ return totals_option && sparse_option && sparse_file_p (st);
|
|
||||||
+ return !(st->archive_file_size == 0
|
|
||||||
+ && (st->stat.st_mode & MODE_R) == MODE_R);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1437,7 +1441,7 @@
|
|
||||||
else
|
|
||||||
fd = -1;
|
|
||||||
|
|
||||||
- if (sparse_option && sparse_file_p (st))
|
|
||||||
+ if (fd != -1 && sparse_option && sparse_file_p (st))
|
|
||||||
{
|
|
||||||
status = sparse_dump_file (fd, st);
|
|
||||||
if (status == dump_status_not_implemented)
|
|
File diff suppressed because it is too large
Load Diff
138
tar-1.17-testsuite.patch
Normal file
138
tar-1.17-testsuite.patch
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
--- tar-1.17/tests/exclude.at.testsuite 2007-01-23 11:25:57.000000000 +0100
|
||||||
|
+++ tar-1.17/tests/exclude.at 2007-06-27 11:30:42.000000000 +0200
|
||||||
|
@@ -24,6 +24,8 @@ AT_SETUP([exclude])
|
||||||
|
AT_KEYWORDS([exclude])
|
||||||
|
|
||||||
|
AT_TAR_CHECK([
|
||||||
|
+AT_SORT_PREREQ
|
||||||
|
+
|
||||||
|
mkdir dir
|
||||||
|
echo blues > dir/blues
|
||||||
|
echo jazz > dir/jazz
|
||||||
|
@@ -37,79 +39,79 @@ echo "test" > dir/rock/file
|
||||||
|
for option in exclude-caches exclude-caches-under exclude-caches-all
|
||||||
|
do
|
||||||
|
echo OPTION $option
|
||||||
|
- tar -cf archive.tar --$option -v dir 2>err
|
||||||
|
+ tar -cf archive.tar --$option -v dir 2>err | sort
|
||||||
|
cat err
|
||||||
|
echo ARCHIVE
|
||||||
|
- tar tf archive.tar
|
||||||
|
+ tar tf archive.tar | sort
|
||||||
|
done
|
||||||
|
|
||||||
|
for option in exclude-tag exclude-tag-under exclude-tag-all
|
||||||
|
do
|
||||||
|
echo OPTION $option
|
||||||
|
- tar -cf archive.tar --${option}=tagfile -v dir 2>err
|
||||||
|
+ tar -cf archive.tar --${option}=tagfile -v dir 2>err | sort
|
||||||
|
cat err
|
||||||
|
echo ARCHIVE
|
||||||
|
- tar tf archive.tar
|
||||||
|
+ tar tf archive.tar | sort
|
||||||
|
done
|
||||||
|
],
|
||||||
|
[0],
|
||||||
|
[OPTION exclude-caches
|
||||||
|
dir/
|
||||||
|
dir/blues
|
||||||
|
-dir/jazz
|
||||||
|
dir/folk/
|
||||||
|
-dir/folk/tagfile
|
||||||
|
dir/folk/sanjuan
|
||||||
|
+dir/folk/tagfile
|
||||||
|
+dir/jazz
|
||||||
|
dir/rock/
|
||||||
|
dir/rock/CACHEDIR.TAG
|
||||||
|
tar: dir/rock/: contains a cache directory tag CACHEDIR.TAG; contents not dumped
|
||||||
|
ARCHIVE
|
||||||
|
dir/
|
||||||
|
dir/blues
|
||||||
|
-dir/jazz
|
||||||
|
dir/folk/
|
||||||
|
-dir/folk/tagfile
|
||||||
|
dir/folk/sanjuan
|
||||||
|
+dir/folk/tagfile
|
||||||
|
+dir/jazz
|
||||||
|
dir/rock/
|
||||||
|
dir/rock/CACHEDIR.TAG
|
||||||
|
OPTION exclude-caches-under
|
||||||
|
dir/
|
||||||
|
dir/blues
|
||||||
|
-dir/jazz
|
||||||
|
dir/folk/
|
||||||
|
-dir/folk/tagfile
|
||||||
|
dir/folk/sanjuan
|
||||||
|
+dir/folk/tagfile
|
||||||
|
+dir/jazz
|
||||||
|
dir/rock/
|
||||||
|
tar: dir/rock/: contains a cache directory tag CACHEDIR.TAG; contents not dumped
|
||||||
|
ARCHIVE
|
||||||
|
dir/
|
||||||
|
dir/blues
|
||||||
|
-dir/jazz
|
||||||
|
dir/folk/
|
||||||
|
-dir/folk/tagfile
|
||||||
|
dir/folk/sanjuan
|
||||||
|
+dir/folk/tagfile
|
||||||
|
+dir/jazz
|
||||||
|
dir/rock/
|
||||||
|
OPTION exclude-caches-all
|
||||||
|
dir/
|
||||||
|
dir/blues
|
||||||
|
-dir/jazz
|
||||||
|
dir/folk/
|
||||||
|
-dir/folk/tagfile
|
||||||
|
dir/folk/sanjuan
|
||||||
|
+dir/folk/tagfile
|
||||||
|
+dir/jazz
|
||||||
|
tar: dir/rock/: contains a cache directory tag CACHEDIR.TAG; directory not dumped
|
||||||
|
ARCHIVE
|
||||||
|
dir/
|
||||||
|
dir/blues
|
||||||
|
-dir/jazz
|
||||||
|
dir/folk/
|
||||||
|
-dir/folk/tagfile
|
||||||
|
dir/folk/sanjuan
|
||||||
|
+dir/folk/tagfile
|
||||||
|
+dir/jazz
|
||||||
|
OPTION exclude-tag
|
||||||
|
dir/
|
||||||
|
dir/blues
|
||||||
|
-dir/jazz
|
||||||
|
dir/folk/
|
||||||
|
dir/folk/tagfile
|
||||||
|
+dir/jazz
|
||||||
|
dir/rock/
|
||||||
|
dir/rock/CACHEDIR.TAG
|
||||||
|
dir/rock/file
|
||||||
|
@@ -117,17 +119,17 @@ tar: dir/folk/: contains a cache directo
|
||||||
|
ARCHIVE
|
||||||
|
dir/
|
||||||
|
dir/blues
|
||||||
|
-dir/jazz
|
||||||
|
dir/folk/
|
||||||
|
dir/folk/tagfile
|
||||||
|
+dir/jazz
|
||||||
|
dir/rock/
|
||||||
|
dir/rock/CACHEDIR.TAG
|
||||||
|
dir/rock/file
|
||||||
|
OPTION exclude-tag-under
|
||||||
|
dir/
|
||||||
|
dir/blues
|
||||||
|
-dir/jazz
|
||||||
|
dir/folk/
|
||||||
|
+dir/jazz
|
||||||
|
dir/rock/
|
||||||
|
dir/rock/CACHEDIR.TAG
|
||||||
|
dir/rock/file
|
||||||
|
@@ -135,8 +137,8 @@ tar: dir/folk/: contains a cache directo
|
||||||
|
ARCHIVE
|
||||||
|
dir/
|
||||||
|
dir/blues
|
||||||
|
-dir/jazz
|
||||||
|
dir/folk/
|
||||||
|
+dir/jazz
|
||||||
|
dir/rock/
|
||||||
|
dir/rock/CACHEDIR.TAG
|
||||||
|
dir/rock/file
|
74
tar-1.17-wildcards.patch
Normal file
74
tar-1.17-wildcards.patch
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
--- tar-1.17/doc/tar.texi.wildcards 2007-06-28 13:23:46.000000000 +0200
|
||||||
|
+++ tar-1.17/doc/tar.texi 2007-06-28 13:23:46.000000000 +0200
|
||||||
|
@@ -6871,7 +6871,7 @@ The following table summarizes pattern-m
|
||||||
|
|
||||||
|
@multitable @columnfractions .3 .7
|
||||||
|
@headitem Members @tab Default settings
|
||||||
|
-@item Inclusion @tab @option{--no-wildcards --anchored --no-wildcards-match-slash}
|
||||||
|
+@item Inclusion @tab @option{--wildcards --anchored --wildcards-match-slash}
|
||||||
|
@item Exclusion @tab @option{--wildcards --no-anchored --wildcards-match-slash}
|
||||||
|
@end multitable
|
||||||
|
|
||||||
|
@@ -10666,6 +10666,9 @@ version of this document is available at
|
||||||
|
@table @asis
|
||||||
|
@item Use of globbing patterns when listing and extracting.
|
||||||
|
|
||||||
|
+Note: Following is true for original unpatched GNU tar.
|
||||||
|
+For compatibility reasons, the old behavior was preserved.
|
||||||
|
+
|
||||||
|
Previous versions of GNU tar assumed shell-style globbing when
|
||||||
|
extracting from or listing an archive. For example:
|
||||||
|
|
||||||
|
--- tar-1.17/src/tar.c.wildcards 2007-06-28 13:23:46.000000000 +0200
|
||||||
|
+++ tar-1.17/src/tar.c 2007-06-28 13:23:46.000000000 +0200
|
||||||
|
@@ -686,7 +686,7 @@ static struct argp_option options[] = {
|
||||||
|
{"no-ignore-case", NO_IGNORE_CASE_OPTION, 0, 0,
|
||||||
|
N_("case sensitive matching (default)"), GRID+1 },
|
||||||
|
{"wildcards", WILDCARDS_OPTION, 0, 0,
|
||||||
|
- N_("use wildcards (default for exclusion)"), GRID+1 },
|
||||||
|
+ N_("use wildcards (default)"), GRID+1 },
|
||||||
|
{"no-wildcards", NO_WILDCARDS_OPTION, 0, 0,
|
||||||
|
N_("verbatim string matching"), GRID+1 },
|
||||||
|
{"no-wildcards-match-slash", NO_WILDCARDS_MATCH_SLASH_OPTION, 0, 0,
|
||||||
|
@@ -780,8 +780,7 @@ ARGMATCH_VERIFY (atime_preserve_args, at
|
||||||
|
/* Wildcard matching settings */
|
||||||
|
enum wildcards
|
||||||
|
{
|
||||||
|
- default_wildcards, /* For exclusion == enable_wildcards,
|
||||||
|
- for inclusion == disable_wildcards */
|
||||||
|
+ default_wildcards, /* enable_wildcards */
|
||||||
|
disable_wildcards,
|
||||||
|
enable_wildcards
|
||||||
|
};
|
||||||
|
@@ -809,7 +808,7 @@ struct tar_args /* Variables used
|
||||||
|
| recursion_option)
|
||||||
|
|
||||||
|
#define MAKE_INCL_OPTIONS(args) \
|
||||||
|
- ((((args)->wildcards == enable_wildcards) ? EXCLUDE_WILDCARDS : 0) \
|
||||||
|
+ ((((args)->wildcards != disable_wildcards) ? EXCLUDE_WILDCARDS : 0) \
|
||||||
|
| (args)->include_anchored \
|
||||||
|
| (args)->matching_flags \
|
||||||
|
| recursion_option)
|
||||||
|
@@ -2126,7 +2125,7 @@ decode_options (int argc, char **argv)
|
||||||
|
|
||||||
|
/* Warn about implicit use of the wildcards in command line arguments.
|
||||||
|
See TODO */
|
||||||
|
- warn_regex_usage = args.wildcards == default_wildcards;
|
||||||
|
+ warn_regex_usage = 0; //args.wildcards == default_wildcards;
|
||||||
|
|
||||||
|
/* Derive option values and check option consistency. */
|
||||||
|
|
||||||
|
--- 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)
|
||||||
|
next_name = name->next;
|
||||||
|
if (name->found_count || name->dir_contents)
|
||||||
|
continue;
|
||||||
|
- if (name->matching_flags & EXCLUDE_WILDCARDS)
|
||||||
|
- /* NOTE: EXCLUDE_ANCHORED is not relevant here */
|
||||||
|
- /* FIXME: just skip regexps for now */
|
||||||
|
- continue;
|
||||||
|
+
|
||||||
|
chdir_do (name->change_dir);
|
||||||
|
if (name->name[0] == 0)
|
||||||
|
continue;
|
1710
tar-1.17-xattrs.patch
Normal file
1710
tar-1.17-xattrs.patch
Normal file
File diff suppressed because it is too large
Load Diff
57
tar.spec
57
tar.spec
@ -1,32 +1,20 @@
|
|||||||
Summary: A GNU file archiving program
|
Summary: A GNU file archiving program
|
||||||
Name: tar
|
Name: tar
|
||||||
Epoch: 2
|
Epoch: 2
|
||||||
Version: 1.15.1
|
Version: 1.17
|
||||||
Release: 26%{?dist}
|
Release: 1%{?dist}
|
||||||
License: GPL
|
License: GPL
|
||||||
Group: Applications/Archiving
|
Group: Applications/Archiving
|
||||||
URL: http://www.gnu.org/software/tar/
|
URL: http://www.gnu.org/software/tar/
|
||||||
Source0: ftp://ftp.gnu.org/pub/gnu/tar/tar-%{version}.tar.gz
|
Source0: ftp://ftp.gnu.org/pub/gnu/tar/tar-%{version}.tar.gz
|
||||||
Source1: ftp://ftp.gnu.org/pub/gnu/tar/tar-%{version}.tar.gz.sig
|
Source1: ftp://ftp.gnu.org/pub/gnu/tar/tar-%{version}.tar.gz.sig
|
||||||
Source2: tar.1
|
Patch1: tar-1.14-loneZeroWarning.patch
|
||||||
Patch1: tar-1.14-nolibrt.patch
|
Patch2: tar-1.15.1-vfatTruncate.patch
|
||||||
Patch2: tar-1.14-loneZeroWarning.patch
|
Patch3: tar-1.17-testsuite.patch
|
||||||
Patch3: tar-1.15.1-makeCheck.patch
|
Patch4: tar-1.17-xattrs.patch
|
||||||
Patch4: tar-1.15.1-gcc4.patch
|
Patch5: tar-1.17-wildcards.patch
|
||||||
Patch5: tar-1.15.1-lseek.patch
|
|
||||||
Patch6: tar-1.15.1-sparseTotals.patch
|
|
||||||
Patch7: tar-1.15.1-newerOption.patch
|
|
||||||
Patch8: tar-1.15.1-padCorrectly.patch
|
|
||||||
Patch9: tar-1.15.1-vfatTruncate.patch
|
|
||||||
Patch10: tar-1.15.1-heapOverflow.patch
|
|
||||||
Patch11: tar-1.15.1-hugeSparse.patch
|
|
||||||
Patch12: tar-1.15.1-optionsOrder.patch
|
|
||||||
Patch13: tar-1.15.1-permissions.patch
|
|
||||||
Patch14: tar-1.15.1-incompatibilities.patch
|
|
||||||
Patch15: tar-1.15.1-xattrs.patch
|
|
||||||
Patch16: tar-1.15.1-mangling.patch
|
|
||||||
Prereq: info
|
Prereq: info
|
||||||
BuildRequires: autoconf automake gzip
|
BuildRequires: autoconf automake gzip texinfo gettext libacl-devel libselinux-devel
|
||||||
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
Requires(post): /sbin/install-info
|
Requires(post): /sbin/install-info
|
||||||
Requires(preun): /sbin/install-info
|
Requires(preun): /sbin/install-info
|
||||||
@ -45,22 +33,11 @@ the rmt package.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
%patch1 -p1 -b .nolibrt
|
%patch1 -p1 -b .loneZeroWarning
|
||||||
%patch2 -p1 -b .loneZeroWarning
|
%patch2 -p1 -b .vfatTruncate
|
||||||
%patch3 -p1 -b .makeCheck
|
%patch3 -p1 -b .testsuite
|
||||||
%patch4 -p1 -b .gcc4
|
%patch4 -p1 -b .xattrs
|
||||||
%patch5 -p1 -b .lseek
|
%patch5 -p1 -b .wildcards
|
||||||
%patch6 -p1 -b .sparseTotals
|
|
||||||
%patch7 -p1 -b .newerOption
|
|
||||||
%patch8 -p1 -b .padCorrectly
|
|
||||||
%patch9 -p1 -b .vfatTruncate
|
|
||||||
%patch10 -p0 -b .heapOverflow
|
|
||||||
%patch11 -p1 -b .hugeSparse
|
|
||||||
%patch12 -p1 -b .optionsOrder
|
|
||||||
%patch13 -p1 -b .permissions
|
|
||||||
%patch14 -p1 -b .incompatibilities
|
|
||||||
%patch15 -p1 -b .xattrs
|
|
||||||
%patch16 -p1 -b .mangling
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%configure --bindir=/bin --libexecdir=/sbin
|
%configure --bindir=/bin --libexecdir=/sbin
|
||||||
@ -111,6 +88,14 @@ fi
|
|||||||
%{_infodir}/tar.info*
|
%{_infodir}/tar.info*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Jun 28 2007 Radek Brich <rbrich@redhat.com> 2:1.17-1
|
||||||
|
- new upstream version
|
||||||
|
- patch for wildcards incompatibility (#206841), restoring old behavior
|
||||||
|
- patch for testsuite
|
||||||
|
(http://lists.gnu.org/archive/html/bug-tar/2007-06/msg00010.html)
|
||||||
|
- update -xattrs patch
|
||||||
|
- drop 13 obsolete patches
|
||||||
|
|
||||||
* Tue Feb 06 2007 Peter Vrabec <pvrabec@redhat.com> 2:1.15.1-26
|
* Tue Feb 06 2007 Peter Vrabec <pvrabec@redhat.com> 2:1.15.1-26
|
||||||
- fix spec file to meet Fedora standards (#226478)
|
- fix spec file to meet Fedora standards (#226478)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user