From d57d62686dac254e83fbc18f851c773ec16013d8 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 17 Sep 2009 02:43:14 +0200 Subject: tar: fix --numeric-owner, --no-same-owner, --no-same-permissions bits Signed-off-by: Denys Vlasenko --- archival/libunarchive/data_extract_all.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) (limited to 'archival/libunarchive/data_extract_all.c') diff --git a/archival/libunarchive/data_extract_all.c b/archival/libunarchive/data_extract_all.c index d79ef7cb9..3e4a77de8 100644 --- a/archival/libunarchive/data_extract_all.c +++ b/archival/libunarchive/data_extract_all.c @@ -18,14 +18,13 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle) free(name); } - /* Check if the file already exists */ - if (archive_handle->ah_flags & ARCHIVE_EXTRACT_UNCONDITIONAL) { + if (archive_handle->ah_flags & ARCHIVE_UNLINK_OLD) { /* Remove the entry if it exists */ if ((!S_ISDIR(file_header->mode)) && (unlink(file_header->name) == -1) && (errno != ENOENT) ) { - bb_perror_msg_and_die("cannot remove old file %s", + bb_perror_msg_and_die("can't remove old file %s", file_header->name); } } @@ -34,7 +33,7 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle) struct stat statbuf; if (lstat(file_header->name, &statbuf) == -1) { if (errno != ENOENT) { - bb_perror_msg_and_die("cannot stat old file"); + bb_perror_msg_and_die("can't stat old file"); } } else if (statbuf.st_mtime <= file_header->mtime) { @@ -46,7 +45,7 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle) return; } else if ((unlink(file_header->name) == -1) && (errno != EISDIR)) { - bb_perror_msg_and_die("cannot remove old file %s", + bb_perror_msg_and_die("can't remove old file %s", file_header->name); } } @@ -59,7 +58,7 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle) /* hard link */ res = link(file_header->link_target, file_header->name); if ((res == -1) && !(archive_handle->ah_flags & ARCHIVE_EXTRACT_QUIET)) { - bb_perror_msg("cannot create %slink " + bb_perror_msg("can't create %slink " "from %s to %s", "hard", file_header->name, file_header->link_target); @@ -69,8 +68,10 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle) switch (file_header->mode & S_IFMT) { case S_IFREG: { /* Regular file */ - dst_fd = xopen3(file_header->name, O_WRONLY | O_CREAT | O_EXCL, - file_header->mode); + dst_fd = xopen3(file_header->name, + O_WRONLY | O_CREAT | O_EXCL, + file_header->mode + ); bb_copyfd_exact_size(archive_handle->src_fd, dst_fd, file_header->size); close(dst_fd); break; @@ -82,7 +83,7 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle) && (errno != EEXIST) && !(archive_handle->ah_flags & ARCHIVE_EXTRACT_QUIET) ) { - bb_perror_msg("cannot make dir %s", file_header->name); + bb_perror_msg("can't make dir %s", file_header->name); } break; case S_IFLNK: @@ -91,7 +92,7 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle) if ((res == -1) && !(archive_handle->ah_flags & ARCHIVE_EXTRACT_QUIET) ) { - bb_perror_msg("cannot create %slink " + bb_perror_msg("can't create %slink " "from %s to %s", "sym", file_header->name, file_header->link_target); @@ -105,7 +106,7 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle) if ((res == -1) && !(archive_handle->ah_flags & ARCHIVE_EXTRACT_QUIET) ) { - bb_perror_msg("cannot create node %s", file_header->name); + bb_perror_msg("can't create node %s", file_header->name); } break; default: @@ -113,7 +114,7 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle) } } - if (!(archive_handle->ah_flags & ARCHIVE_NOPRESERVE_OWN)) { + if (!(archive_handle->ah_flags & ARCHIVE_DONT_RESTORE_OWNER)) { #if ENABLE_FEATURE_TAR_UNAME_GNAME if (!(archive_handle->ah_flags & ARCHIVE_NUMERIC_OWNER)) { uid_t uid = file_header->uid; @@ -136,11 +137,11 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle) /* uclibc has no lchmod, glibc is even stranger - * it has lchmod which seems to do nothing! * so we use chmod... */ - if (!(archive_handle->ah_flags & ARCHIVE_NOPRESERVE_PERM)) { + if (!(archive_handle->ah_flags & ARCHIVE_DONT_RESTORE_PERM)) { chmod(file_header->name, file_header->mode); } /* same for utime */ - if (archive_handle->ah_flags & ARCHIVE_PRESERVE_DATE) { + if (archive_handle->ah_flags & ARCHIVE_RESTORE_DATE) { struct utimbuf t; t.actime = t.modtime = file_header->mtime; utime(file_header->name, &t); -- cgit v1.2.3