From 87fd44a463b47af4d353ba3f4333a0a9d14974f7 Mon Sep 17 00:00:00 2001 From: "Tom G. Christensen" Date: Thu, 29 Jan 2004 14:13:13 +0000 Subject: [PATCH] Latest GNU tar This is the version used in most Linux dists --- tar/build.sh | 116 ++++++++ tar/src/tar-1.13.18-manpage.patch | 339 ++++++++++++++++++++++++ tar/src/tar-1.13.19-absolutenames.patch | 23 ++ tar/src/tar-1.13.19-error.patch | 15 ++ tar/src/tar-1.13.22-nolibrt.patch | 19 ++ tar/src/tar-1.13.25-argv.patch | 22 ++ tar/src/tar-1.13.25-autoconf.patch | 11 + tar/src/tar-1.13.25-dots.patch | 16 ++ tar/src/tar-1.13.25-sock.patch | 36 +++ 9 files changed, 597 insertions(+) create mode 100755 tar/build.sh create mode 100644 tar/src/tar-1.13.18-manpage.patch create mode 100644 tar/src/tar-1.13.19-absolutenames.patch create mode 100644 tar/src/tar-1.13.19-error.patch create mode 100644 tar/src/tar-1.13.22-nolibrt.patch create mode 100644 tar/src/tar-1.13.25-argv.patch create mode 100644 tar/src/tar-1.13.25-autoconf.patch create mode 100644 tar/src/tar-1.13.25-dots.patch create mode 100644 tar/src/tar-1.13.25-sock.patch diff --git a/tar/build.sh b/tar/build.sh new file mode 100755 index 0000000..8045500 --- /dev/null +++ b/tar/build.sh @@ -0,0 +1,116 @@ +#!/usr/local/bin/bash +# +# This is a generic build.sh script +# It can be used nearly unmodified with many packages +# +# The concept of "method" registering and the logic that implements it was shamelessly +# stolen from jhlj's Compile.sh script :) +# +# Check the following 4 variables before running the script +topdir=tar +version=1.13.25 +pkgver=2 +source[0]=$topdir-$version.tar.bz2 +# If there are no patches, simply comment this +patch[0]=tar-1.13.18-manpage.patch +patch[1]=tar-1.13.19-absolutenames.patch +patch[2]=tar-1.13.19-error.patch +patch[3]= #tar-1.13.22-nolibrt.patch +patch[4]=tar-1.13.25-argv.patch +patch[5]= #tar-1.13.25-autoconf.patch +patch[6]=tar-1.13.25-dots.patch +patch[7]=tar-1.13.25-sock.patch + +# Source function library +. ${BUILDPKG_BASE}/scripts/buildpkg.functions + +# Fill in pkginfo values if necessary +# using pkgname,name,pkgcat,pkgvendor & pkgdesc +name="GNU tar" +pkgcat="application" +pkgvendor="http://www.gnu.org" +pkgdesc="Creates tar archives" + +# Define script functions and register them +METHODS="" +reg() { + METHODS="$METHODS $1" +} + +reg prep +prep() +{ + generic_prep +} + +reg build +build() +{ + generic_build +} + +reg install +install() +{ + generic_install DESTDIR + $RM -f $stagedir$prefix/info/dir + INSTALL="/usr/local/bin/install -D" + setdir source + $INSTALL -m 644 tar.1 $stagedir$prefix/man/man1/tar.1 + +} + +reg pack +pack() +{ + generic_pack +} + +reg distclean +distclean() +{ + clean distclean +} + +################################################### +# No need to look below here +################################################### + +reg all +all() +{ + for METHOD in $METHODS + do + case $METHOD in + all*|*clean) ;; + *) $METHOD + ;; + esac + done + +} + +reg +usage() { + echo Usage $0 "{"$(echo $METHODS | tr " " "|")"}" + exit 1 +} + +OK=0 +for METHOD in $* +do + METHOD=" $METHOD *" + if [ "${METHODS%$METHOD}" == "$METHODS" ] ; then + usage + fi + OK=1 +done + +if [ $OK = 0 ] ; then + usage; +fi + +for METHOD in $* +do + ( $METHOD ) +done diff --git a/tar/src/tar-1.13.18-manpage.patch b/tar/src/tar-1.13.18-manpage.patch new file mode 100644 index 0000000..4bacf41 --- /dev/null +++ b/tar/src/tar-1.13.18-manpage.patch @@ -0,0 +1,339 @@ +--- tar-1.13.18/tar.1.manpage Mon Oct 30 12:52:03 2000 ++++ tar-1.13.18/tar.1 Mon Oct 30 12:56:15 2000 +@@ -0,0 +1,336 @@ ++.\" @(#)tar.1 1.13.14 2000/10/30 Bero; ++.TH TAR 1 "30 October 2000" ++.SH NAME ++tar \- The GNU version of the tar archiving utility ++.SH SYNOPSIS ++.B tar ++[ ++.B \- ++] ++.B A --catenate --concatenate \||\| c --create \||\| d --diff --compare \||\| r --append \||\| t --list \||\| u --update \||\| x -extract --get ++[ ++.B --atime-preserve ++] ++[ ++.B -b, --block-size N ++] ++[ ++.B -B, --read-full-blocks ++] ++[ ++.B -C, --directory DIR ++] ++[ ++.B --checkpoint ++] ++[ ++.B -f, --file [HOSTNAME:]F ++] ++[ ++.B --force-local ++] ++[ ++.B -F, --info-script F --new-volume-script F ++] ++[ ++.B -G, --incremental ++] ++[ ++.B -g, --listed-incremental F ++] ++[ ++.B -h, --dereference ++] ++[ ++.B -i, --ignore-zeros ++] ++[ ++.B -j, -I, --bzip ++] ++[ ++.B --ignore-failed-read ++] ++[ ++.B -k, --keep-old-files ++] ++[ ++.B -K, --starting-file F ++] ++[ ++.B -l, --one-file-system ++] ++[ ++.B -L, --tape-length N ++] ++[ ++.B -m, --modification-time ++] ++[ ++.B -M, --multi-volume ++] ++[ ++.B -N, --after-date DATE, --newer DATE ++] ++[ ++.B -o, --old-archive, --portability ++] ++[ ++.B -O, --to-stdout ++] ++[ ++.B -p, --same-permissions, --preserve-permissions ++] ++[ ++.B -P, --absolute-paths ++] ++[ ++.B --preserve ++] ++[ ++.B -R, --record-number ++] ++[ ++.B --remove-files ++] ++[ ++.B -s, --same-order, --preserve-order ++] ++[ ++.B --same-owner ++] ++[ ++.B -S, --sparse ++] ++[ ++.B -T, --files-from=F ++] ++[ ++.B --null ++] ++[ ++.B --totals ++] ++[ ++.B -v, --verbose ++] ++[ ++.B -V, --label NAME ++] ++[ ++.B --version ++] ++[ ++.B -w, --interactive, --confirmation ++] ++[ ++.B -W, --verify ++] ++[ ++.B --exclude FILE ++] ++[ ++.B -X, --exclude-from FILE ++] ++[ ++.B -Z, --compress, --uncompress ++] ++[ ++.B -z, --gzip, --ungzip ++] ++[ ++.B --use-compress-program PROG ++] ++[ ++.B --block-compress ++] ++[ ++.B -[0-7][lmh] ++] ++.TP ++.I filename1 [ filename2, ... filenameN ] ++.TP ++.I directory1 [ directory2, ...directoryN ] ++.SH DESCRIPTION ++.LP ++This manual page documents the GNU version of ++.B tar ++, an archiving program designed to store and extract files from ++an archive file known as a ++.IR tarfile. ++A ++.IR tarfile ++may be made on a tape drive, however, it is also common ++to write a ++.IR tarfile ++to a normal file. ++The first argument to ++.B tar ++must be one of the options: ++.BR Acdrtux , ++followed by any optional functions. ++The final arguments to ++.B tar ++are the names of the files or directories which should be archived. The use ++of a directory name always implies that the subdirectories below should be ++included in the archive. ++.SH "FUNCTION LETTERS" ++.TP ++.B One of the following options must be used: ++.TP ++.B -A, --catenate, --concatenate ++append tar files to an archive ++.TP ++.B -c, --create ++create a new archive ++.TP ++.B -d, --diff, --compare ++find differences between archive and file system ++.TP ++.B --delete ++delete from the archive (not for use on mag tapes!) ++.TP ++.B -r, --append ++append files to the end of an archive ++.TP ++.B -t, --list ++list the contents of an archive ++.TP ++.B -u, --update ++only append files that are newer than copy in archive ++.TP ++.B -x, --extract, --get ++extract files from an archive ++.SH "OTHER OPTIONS" ++.TP ++.B --atime-preserve ++don't change access times on dumped files ++.TP ++.B -b, --block-size N ++block size of Nx512 bytes (default N=20) ++.TP ++.B -B, --read-full-blocks ++reblock as we read (for reading 4.2BSD pipes) ++.TP ++.B -C, --directory DIR ++change to directory DIR ++.TP ++.B --checkpoint ++print directory names while reading the archive ++.TP ++.B -f, --file [HOSTNAME:]F ++use archive file or device F (default /dev/rmt0) ++.TP ++.B --force-local ++archive file is local even if has a colon ++.TP ++.B -F, --info-script F --new-volume-script F ++run script at end of each tape (implies -M) ++.TP ++.B -G, --incremental ++create/list/extract old GNU-format incremental backup ++.TP ++.B -g, --listed-incremental F ++create/list/extract new GNU-format incremental backup ++.TP ++.B -h, --dereference ++don't dump symlinks; dump the files they point to ++.TP ++.B -i, --ignore-zeros ++ignore blocks of zeros in archive (normally mean EOF) ++.TP ++.B -j, -I, --bzip ++filter the archive through bzip2. Note: -I is deprecated and may get a ++different meaning in the near future. ++.TP ++.B --ignore-failed-read ++don't exit with non-zero status on unreadable files ++.TP ++.B -k, --keep-old-files ++keep existing files; don't overwrite them from archive ++.TP ++.B -K, --starting-file F ++begin at file F in the archive ++.TP ++.B -l, --one-file-system ++stay in local file system when creating an archive ++.TP ++.B -L, --tape-length N ++change tapes after writing N*1024 bytes ++.TP ++.B -m, --modification-time ++don't extract file modified time ++.TP ++.B -M, --multi-volume ++create/list/extract multi-volume archive ++.TP ++.B -N, --after-date DATE, --newer DATE ++only store files newer than DATE ++.TP ++.B -o, --old-archive, --portability ++write a V7 format archive, rather than ANSI format ++.TP ++.B -O, --to-stdout ++extract files to standard output ++.TP ++.B -p, --same-permissions, --preserve-permissions ++extract all protection information ++.TP ++.B -P, --absolute-paths ++don't strip leading `/'s from file names ++.TP ++.B --preserve ++like -p -s ++.TP ++.B -R, --record-number ++show record number within archive with each message ++.TP ++.B --remove-files ++remove files after adding them to the archive ++.TP ++.B -s, --same-order, --preserve-order ++list of names to extract is sorted to match archive ++.TP ++.B --same-owner ++create extracted files with the same ownership ++.TP ++.B -S, --sparse ++handle sparse files efficiently ++.TP ++.B -T, --files-from=F ++get names to extract or create from file F ++.TP ++.B --null ++-T reads null-terminated names, disable -C ++.TP ++.B --totals ++print total bytes written with --create ++.TP ++.B -v, --verbose ++verbosely list files processed ++.TP ++.B -V, --label NAME ++create archive with volume name NAME ++.TP ++.B --version ++print tar program version number ++.TP ++.B -w, --interactive, --confirmation ++ask for confirmation for every action ++.TP ++.B -W, --verify ++attempt to verify the archive after writing it ++.TP ++.B --exclude FILE ++exclude file FILE ++.TP ++.B -X, --exclude-from FILE ++exclude files listed in FILE ++.TP ++.B -Z, --compress, --uncompress ++filter the archive through compress ++.TP ++.B -z, --gzip, --ungzip ++filter the archive through gzip ++.TP ++.B --use-compress-program PROG ++filter the archive through PROG (which must accept -d) diff --git a/tar/src/tar-1.13.19-absolutenames.patch b/tar/src/tar-1.13.19-absolutenames.patch new file mode 100644 index 0000000..644151c --- /dev/null +++ b/tar/src/tar-1.13.19-absolutenames.patch @@ -0,0 +1,23 @@ +--- tar-1.13.19/src/extract.c~ Sat Jan 13 00:59:29 2001 ++++ tar-1.13.19/src/extract.c Mon Aug 20 08:50:49 2001 +@@ -932,10 +932,19 @@ + { + struct stat st1, st2; + int e; ++ size_t skiplinkcrud; ++ ++ if (absolute_names_option) ++ skiplinkcrud = 0; ++ else { ++ skiplinkcrud = FILESYSTEM_PREFIX_LEN (current_link_name); ++ while (ISSLASH (current_link_name[skiplinkcrud])) ++ skiplinkcrud++; ++ } + + /* MSDOS does not implement links. However, djgpp's link() actually + copies the file. */ +- status = link (current_link_name, CURRENT_FILE_NAME); ++ status = link (current_link_name + skiplinkcrud, CURRENT_FILE_NAME); + + if (status == 0) + break; diff --git a/tar/src/tar-1.13.19-error.patch b/tar/src/tar-1.13.19-error.patch new file mode 100644 index 0000000..4be8770 --- /dev/null +++ b/tar/src/tar-1.13.19-error.patch @@ -0,0 +1,15 @@ +--- tar-1.13.19/src/incremen.c.sux Thu May 17 14:16:47 2001 ++++ tar-1.13.19/src/incremen.c Thu May 17 14:17:00 2001 +@@ -182,8 +182,11 @@ + struct directory *directory; /* for checking if already already seen */ + enum children children; + ++ if (! dirp) { +- if (! dirp) + savedir_error (path); ++ errno = 1; ++ return NULL; ++ } + errno = 0; + + name_buffer_size = strlen (path) + NAME_FIELD_SIZE; diff --git a/tar/src/tar-1.13.22-nolibrt.patch b/tar/src/tar-1.13.22-nolibrt.patch new file mode 100644 index 0000000..10f4362 --- /dev/null +++ b/tar/src/tar-1.13.22-nolibrt.patch @@ -0,0 +1,19 @@ +--- tar-1.13.22/configure.ac.rt Thu Sep 13 14:06:03 2001 ++++ tar-1.13.22/configure.ac Thu Sep 13 14:06:50 2001 +@@ -166,12 +166,13 @@ + # + # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function. + # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4. ++# We don't want that dependency, though. Check for something weird. ;) + tar_LDADD= + tar_save_LIBS="$LIBS" +-AC_SEARCH_LIBS(clock_gettime, [rt posix4]) +-AC_CHECK_FUNCS(clock_gettime) ++AC_SEARCH_LIBS(clock_gettyme, [rt posix4]) ++AC_CHECK_FUNCS(clock_gettyme) + if test " $LIBS" != " $tar_save_LIBS"; then +- tar_LDADD="$ac_cv_search_clock_gettime" ++ tar_LDADD="$ac_cv_search_clock_gettyme" + LIBS="$tar_save_LIBS" + fi + AC_SUBST(tar_LDADD) diff --git a/tar/src/tar-1.13.25-argv.patch b/tar/src/tar-1.13.25-argv.patch new file mode 100644 index 0000000..77137d9 --- /dev/null +++ b/tar/src/tar-1.13.25-argv.patch @@ -0,0 +1,22 @@ +--- tar-1.13.25/src/tar.c 2001-09-21 02:11:27.000000000 +0200 ++++ tar-1.13.25/src/tar.c 2002-06-16 18:19:04.000000000 +0200 +@@ -534,7 +534,7 @@ + /* Allocate a new argument array, and copy program name in it. */ + + new_argc = argc - 1 + strlen (argv[1]); +- new_argv = xmalloc (new_argc * sizeof (char *)); ++ new_argv = xmalloc ((new_argc + 1) * sizeof (char *)); + in = argv; + out = new_argv; + *out++ = *in++; +@@ -562,6 +562,10 @@ + while (in < argv + argc) + *out++ = *in++; + ++ /* K&R standard requires a NULL termination */ ++ ++ *out = NULL; ++ + /* Replace the old option list by the new one. */ + + argc = new_argc; diff --git a/tar/src/tar-1.13.25-autoconf.patch b/tar/src/tar-1.13.25-autoconf.patch new file mode 100644 index 0000000..00574d4 --- /dev/null +++ b/tar/src/tar-1.13.25-autoconf.patch @@ -0,0 +1,11 @@ +--- tar-1.13.25/configure.ac.253 Tue Apr 9 19:21:01 2002 ++++ tar-1.13.25/configure.ac Tue Apr 9 19:21:22 2002 +@@ -234,7 +234,7 @@ + jm_FUNC_MALLOC + jm_FUNC_MKTIME + jm_FUNC_REALLOC +-test "$ac_cv_func_strstr" = yes || LIBOBJS="$LIBOBJS strstr.o" ++test "$ac_cv_func_strstr" = yes || AC_LIBOBJ(strstr) + + AC_CACHE_CHECK(for remote shell, tar_cv_path_RSH, + [if test -n "$RSH"; then diff --git a/tar/src/tar-1.13.25-dots.patch b/tar/src/tar-1.13.25-dots.patch new file mode 100644 index 0000000..dcc3d02 --- /dev/null +++ b/tar/src/tar-1.13.25-dots.patch @@ -0,0 +1,16 @@ +--- tar-1.13.25/src/misc.c.orig Mon Aug 27 00:14:26 2001 ++++ tar-1.13.25/src/misc.c Mon May 27 11:29:31 2002 +@@ -214,6 +214,13 @@ + return 0; + } + while (! ISSLASH (*p)); ++ ++ do ++ { ++ if (! *p++) ++ return 0; ++ } ++ while ( ISSLASH (*p)); + } + } + diff --git a/tar/src/tar-1.13.25-sock.patch b/tar/src/tar-1.13.25-sock.patch new file mode 100644 index 0000000..716ef78 --- /dev/null +++ b/tar/src/tar-1.13.25-sock.patch @@ -0,0 +1,36 @@ +--- tar-1.13.25/src/create.c.sock Tue Oct 23 15:00:52 2001 ++++ tar-1.13.25/src/create.c Tue Oct 23 15:02:33 2001 +@@ -1128,6 +1128,16 @@ + } + else if (is_avoided_name (p)) + return; ++ else if (S_ISSOCK (current_stat.st_mode)) ++ { ++ WARN ((0, 0, _("%s: socket ignored"), quotearg_colon (p))); ++ return; ++ } ++ else if (S_ISDOOR (current_stat.st_mode)) ++ { ++ WARN ((0, 0, _("%s: door ignored"), quotearg_colon (p))); ++ return; ++ } + else + { + /* Check for multiple links. +@@ -1507,16 +1517,6 @@ + type = BLKTYPE; + else if (S_ISFIFO (current_stat.st_mode)) + type = FIFOTYPE; +- else if (S_ISSOCK (current_stat.st_mode)) +- { +- WARN ((0, 0, _("%s: socket ignored"), quotearg_colon (p))); +- return; +- } +- else if (S_ISDOOR (current_stat.st_mode)) +- { +- WARN ((0, 0, _("%s: door ignored"), quotearg_colon (p))); +- return; +- } + else + goto unknown; + }