Update to 1.25, which mostly brings miscellaneous bug fixes.

This commit is contained in:
Christian Weisgerber 2010-11-24 18:02:57 +00:00
parent 50fd51edcb
commit 1cb39c944d
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=265098
7 changed files with 16 additions and 208 deletions

View File

@ -6,8 +6,7 @@
#
PORTNAME= tar
PORTVERSION= 1.23
PORTREVISION= 3
PORTVERSION= 1.25
CATEGORIES= archivers sysutils
MASTER_SITES= ${MASTER_SITE_GNU}
MASTER_SITE_SUBDIR= ${PORTNAME}
@ -21,8 +20,7 @@ COMMENT= GNU version of the traditional tape archiver
INFO= tar
USE_AUTOTOOLS= autoconf:268:env
USE_BZIP2= yes
USE_XZ= yes
USE_ICONV= yes
GNU_CONFIGURE= yes
MAKE_JOBS_SAFE= yes

View File

@ -1,3 +1,2 @@
MD5 (tar-1.23.tar.bz2) = 41e2ca4b924ec7860e51b43ad06cdb7e
SHA256 (tar-1.23.tar.bz2) = c9328372db62fbb1d94c9e4e3cefc961111af46de47085b635359c00a0eebe36
SIZE (tar-1.23.tar.bz2) = 2189324
SHA256 (tar-1.25.tar.xz) = 81230b829e2acea2fcd4c686b15f6a77d961871d0d72b961bbebcbd65e04d04c
SIZE (tar-1.25.tar.xz) = 1767776

View File

@ -1,16 +0,0 @@
$FreeBSD$
7.x up to 7.3 lacks the fdopendir() prototype in <dirent.h>.
--- gnu/dirent.in.h.orig 2010-03-29 17:48:45.000000000 +0200
+++ gnu/dirent.in.h 2010-03-29 17:49:00.000000000 +0200
@@ -79,9 +79,7 @@ _GL_WARN_ON_USE (dirfd, "dirfd is unport
_GL_FUNCDECL_RPL (fdopendir, DIR *, (int fd));
_GL_CXXALIAS_RPL (fdopendir, DIR *, (int fd));
# else
-# if !@HAVE_FDOPENDIR@
_GL_FUNCDECL_SYS (fdopendir, DIR *, (int fd));
-# endif
_GL_CXXALIAS_SYS (fdopendir, DIR *, (int fd));
# endif
_GL_CXXALIASWARN (fdopendir);

View File

@ -1,159 +1,14 @@
$FreeBSD$
http://git.savannah.gnu.org/cgit/tar.git/commit/?id=b60e56fdb6fd8d82a1f92a4fa7781d9a3184dce1
--- src/extract.c.orig 2010-01-26 12:28:09.000000000 +0100
+++ src/extract.c 2010-06-11 20:54:04.000000000 +0200
@@ -888,12 +888,22 @@ create_placeholder_file (char *file_name
struct stat st;
while ((fd = open (file_name, O_WRONLY | O_CREAT | O_EXCL, 0)) < 0)
- if (! maybe_recoverable (file_name, interdir_made))
- break;
+ {
+ switch (maybe_recoverable (file_name, interdir_made))
+ {
+ case RECOVER_OK:
+ continue;
+
+ case RECOVER_SKIP:
+ return 0;
+
+ case RECOVER_NO:
+ open_error (file_name);
+ return -1;
+ }
+ }
- if (fd < 0)
- open_error (file_name);
- else if (fstat (fd, &st) != 0)
+ if (fstat (fd, &st) != 0)
FreeBSD produces errno == EMLINK for open("symlink", O_NOFOLLOW|...).
--- src/extract.c.orig 2010-11-23 16:56:47.000000000 +0100
+++ src/extract.c 2010-11-23 16:57:04.000000000 +0100
@@ -609,6 +609,7 @@ maybe_recoverable (char *file_name, bool
switch (e)
{
stat_error (file_name);
close (fd);
@@ -956,7 +966,8 @@ extract_link (char *file_name, int typef
{
int interdir_made = 0;
char const *link_name;
-
+ int rc;
+
link_name = current_stat_info.link_name;
if (! absolute_names_option && contains_dot_dot (link_name))
@@ -996,8 +1007,10 @@ extract_link (char *file_name, int typef
errno = e;
}
- while (maybe_recoverable (file_name, &interdir_made));
+ while ((rc = maybe_recoverable (file_name, &interdir_made)) == RECOVER_OK);
+ if (rc == RECOVER_SKIP)
+ return 0;
if (!(incremental_option && errno == EEXIST))
{
link_error (link_name, file_name);
@@ -1010,7 +1023,6 @@ static int
extract_symlink (char *file_name, int typeflag)
{
#ifdef HAVE_SYMLINK
- int status;
int interdir_made = 0;
if (! absolute_names_option
@@ -1018,15 +1030,22 @@ extract_symlink (char *file_name, int ty
|| contains_dot_dot (current_stat_info.link_name)))
return create_placeholder_file (file_name, true, &interdir_made);
- while ((status = symlink (current_stat_info.link_name, file_name)))
- if (!maybe_recoverable (file_name, &interdir_made))
- break;
-
- if (status == 0)
- set_stat (file_name, &current_stat_info, NULL, 0, 0, SYMTYPE);
- else
- symlink_error (current_stat_info.link_name, file_name);
- return status;
+ while (symlink (current_stat_info.link_name, file_name))
+ switch (maybe_recoverable (file_name, &interdir_made))
+ {
+ case RECOVER_OK:
+ continue;
+
+ case RECOVER_SKIP:
+ return 0;
+
+ case RECOVER_NO:
+ symlink_error (current_stat_info.link_name, file_name);
+ return -1;
+ }
+
+ set_stat (file_name, &current_stat_info, NULL, 0, 0, SYMTYPE);
+ return 0;
#else
static int warned_once;
@@ -1052,16 +1071,23 @@ extract_node (char *file_name, int typef
mode_t invert_permissions =
0 < same_owner_option ? mode & (S_IRWXG | S_IRWXO) : 0;
- do
- status = mknod (file_name, mode ^ invert_permissions,
- current_stat_info.stat.st_rdev);
- while (status && maybe_recoverable (file_name, &interdir_made));
+ while (mknod (file_name, mode ^ invert_permissions,
+ current_stat_info.stat.st_rdev))
+ switch (maybe_recoverable (file_name, &interdir_made))
+ {
+ case RECOVER_OK:
+ continue;
+
+ case RECOVER_SKIP:
+ return 0;
+
+ case RECOVER_NO:
+ mknod_error (file_name);
+ return -1;
+ }
- if (status != 0)
- mknod_error (file_name);
- else
- set_stat (file_name, &current_stat_info, NULL, invert_permissions,
- ARCHIVED_PERMSTATUS, typeflag);
+ set_stat (file_name, &current_stat_info, NULL, invert_permissions,
+ ARCHIVED_PERMSTATUS, typeflag);
return status;
}
#endif
@@ -1077,15 +1103,22 @@ extract_fifo (char *file_name, int typef
0 < same_owner_option ? mode & (S_IRWXG | S_IRWXO) : 0;
while ((status = mkfifo (file_name, mode)) != 0)
- if (!maybe_recoverable (file_name, &interdir_made))
- break;
+ switch (maybe_recoverable (file_name, &interdir_made))
+ {
+ case RECOVER_OK:
+ continue;
+
+ case RECOVER_SKIP:
+ return 0;
+
+ case RECOVER_NO:
+ mkfifo_error (file_name);
+ return -1;
+ }
- if (status == 0)
- set_stat (file_name, &current_stat_info, NULL, invert_permissions,
- ARCHIVED_PERMSTATUS, typeflag);
- else
- mkfifo_error (file_name);
- return status;
+ set_stat (file_name, &current_stat_info, NULL, invert_permissions,
+ ARCHIVED_PERMSTATUS, typeflag);
+ return 0;
}
#endif
case ELOOP:
+ case EMLINK:
if (! regular
|| old_files_option != OVERWRITE_OLD_FILES || dereference_option)
break;

View File

@ -1,14 +0,0 @@
$FreeBSD$
Fix an instance of use-after-free(), from upstream.
--- src/names.c.orig 2010-03-27 21:57:39.000000000 +0100
+++ src/names.c 2010-03-27 21:58:02.000000000 +0100
@@ -950,6 +950,7 @@ collect_and_sort_names (void)
{
if (p->child)
rebase_child_list (p->child, name);
+ hash_delete (nametab, name);
/* FIXME: remove_directory (p->caname); ? */
remname (p);
free_name (p);

View File

@ -1,15 +0,0 @@
$FreeBSD: /tmp/pcvs/ports/archivers/gtar/files/Attic/patch-tests_gzip.at,v 1.2 2010-03-29 17:36:25 naddy Exp $
--- tests/gzip.at.orig 2010-01-26 12:30:21.000000000 +0100
+++ tests/gzip.at 2010-03-17 21:41:11.000000000 +0100
@@ -31,8 +31,7 @@ tar xfvz /dev/null
],
[2],
[],
-[
-gzip: stdin: unexpected end of file
+[gzip: (stdin): unexpected end of file
tar: Child returned status 1
tar: Error is not recoverable: exiting now
],

View File

@ -2,6 +2,7 @@
bin/gtar
libexec/grmt
%%NLS%%share/locale/bg/LC_MESSAGES/tar.mo
%%NLS%%share/locale/ca/LC_MESSAGES/tar.mo
%%NLS%%share/locale/cs/LC_MESSAGES/tar.mo
%%NLS%%share/locale/da/LC_MESSAGES/tar.mo
%%NLS%%share/locale/de/LC_MESSAGES/tar.mo