diff options
-rw-r--r-- | archival/libunarchive/data_extract_all.c | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/archival/libunarchive/data_extract_all.c b/archival/libunarchive/data_extract_all.c index 5d1ec302a..c8d162bce 100644 --- a/archival/libunarchive/data_extract_all.c +++ b/archival/libunarchive/data_extract_all.c | |||
@@ -58,7 +58,8 @@ void data_extract_all(archive_handle_t *archive_handle) | |||
58 | switch(file_header->mode & S_IFMT) { | 58 | switch(file_header->mode & S_IFMT) { |
59 | case S_IFREG: { | 59 | case S_IFREG: { |
60 | /* Regular file */ | 60 | /* Regular file */ |
61 | dst_fd = xopen(file_header->name, O_WRONLY | O_CREAT | O_EXCL); | 61 | dst_fd = xopen3(file_header->name, O_WRONLY | O_CREAT | O_EXCL, |
62 | file_header->mode); | ||
62 | bb_copyfd_size(archive_handle->src_fd, dst_fd, file_header->size); | 63 | bb_copyfd_size(archive_handle->src_fd, dst_fd, file_header->size); |
63 | close(dst_fd); | 64 | close(dst_fd); |
64 | break; | 65 | break; |
@@ -93,11 +94,6 @@ void data_extract_all(archive_handle_t *archive_handle) | |||
93 | if (!(archive_handle->flags & ARCHIVE_NOPRESERVE_OWN)) { | 94 | if (!(archive_handle->flags & ARCHIVE_NOPRESERVE_OWN)) { |
94 | lchown(file_header->name, file_header->uid, file_header->gid); | 95 | lchown(file_header->name, file_header->uid, file_header->gid); |
95 | } | 96 | } |
96 | if (!(archive_handle->flags & ARCHIVE_NOPRESERVE_PERM) && | ||
97 | (file_header->mode & S_IFMT) != S_IFLNK) | ||
98 | { | ||
99 | chmod(file_header->name, file_header->mode); | ||
100 | } | ||
101 | 97 | ||
102 | if (archive_handle->flags & ARCHIVE_PRESERVE_DATE) { | 98 | if (archive_handle->flags & ARCHIVE_PRESERVE_DATE) { |
103 | struct utimbuf t; | 99 | struct utimbuf t; |