diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2006-12-22 00:21:07 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2006-12-22 00:21:07 +0000 |
commit | 714701c890b5f03253c5ecdb7367c4258ce78715 (patch) | |
tree | 7ddaf73cf2deda0f357b21802dab4d42798dd778 /archival/libunarchive | |
parent | 0a8a7741795880201bcf78231d1eab0e2538bb0b (diff) | |
download | busybox-w32-714701c890b5f03253c5ecdb7367c4258ce78715.tar.gz busybox-w32-714701c890b5f03253c5ecdb7367c4258ce78715.tar.bz2 busybox-w32-714701c890b5f03253c5ecdb7367c4258ce78715.zip |
tar et al: die if bb_copyfd_size copies less than asked for.
(we have bb_copyfd_exact_size now for that kind of usage)
Diffstat (limited to 'archival/libunarchive')
-rw-r--r-- | archival/libunarchive/data_extract_all.c | 4 | ||||
-rw-r--r-- | archival/libunarchive/data_extract_to_buffer.c | 3 | ||||
-rw-r--r-- | archival/libunarchive/data_extract_to_stdout.c | 6 | ||||
-rw-r--r-- | archival/libunarchive/get_header_ar.c | 3 | ||||
-rw-r--r-- | archival/libunarchive/get_header_tar.c | 2 | ||||
-rw-r--r-- | archival/libunarchive/seek_by_read.c | 5 |
6 files changed, 12 insertions, 11 deletions
diff --git a/archival/libunarchive/data_extract_all.c b/archival/libunarchive/data_extract_all.c index 67f8f3534..25bf028d2 100644 --- a/archival/libunarchive/data_extract_all.c +++ b/archival/libunarchive/data_extract_all.c | |||
@@ -67,10 +67,10 @@ void data_extract_all(archive_handle_t *archive_handle) | |||
67 | /* Regular file */ | 67 | /* Regular file */ |
68 | dst_fd = xopen3(file_header->name, O_WRONLY | O_CREAT | O_EXCL, | 68 | dst_fd = xopen3(file_header->name, O_WRONLY | O_CREAT | O_EXCL, |
69 | file_header->mode); | 69 | file_header->mode); |
70 | bb_copyfd_size(archive_handle->src_fd, dst_fd, file_header->size); | 70 | bb_copyfd_exact_size(archive_handle->src_fd, dst_fd, file_header->size); |
71 | close(dst_fd); | 71 | close(dst_fd); |
72 | break; | 72 | break; |
73 | } | 73 | } |
74 | case S_IFDIR: | 74 | case S_IFDIR: |
75 | res = mkdir(file_header->name, file_header->mode); | 75 | res = mkdir(file_header->name, file_header->mode); |
76 | if ((errno != EISDIR) && (res == -1) | 76 | if ((errno != EISDIR) && (res == -1) |
diff --git a/archival/libunarchive/data_extract_to_buffer.c b/archival/libunarchive/data_extract_to_buffer.c index 95cb8f576..d8fcdf3d3 100644 --- a/archival/libunarchive/data_extract_to_buffer.c +++ b/archival/libunarchive/data_extract_to_buffer.c | |||
@@ -10,9 +10,8 @@ | |||
10 | 10 | ||
11 | void data_extract_to_buffer(archive_handle_t *archive_handle) | 11 | void data_extract_to_buffer(archive_handle_t *archive_handle) |
12 | { | 12 | { |
13 | const unsigned int size = archive_handle->file_header->size; | 13 | unsigned int size = archive_handle->file_header->size; |
14 | 14 | ||
15 | archive_handle->buffer = xzalloc(size + 1); | 15 | archive_handle->buffer = xzalloc(size + 1); |
16 | |||
17 | xread(archive_handle->src_fd, archive_handle->buffer, size); | 16 | xread(archive_handle->src_fd, archive_handle->buffer, size); |
18 | } | 17 | } |
diff --git a/archival/libunarchive/data_extract_to_stdout.c b/archival/libunarchive/data_extract_to_stdout.c index 788246ce7..2e266c046 100644 --- a/archival/libunarchive/data_extract_to_stdout.c +++ b/archival/libunarchive/data_extract_to_stdout.c | |||
@@ -4,9 +4,11 @@ | |||
4 | */ | 4 | */ |
5 | 5 | ||
6 | #include "unarchive.h" | 6 | #include "unarchive.h" |
7 | #include <unistd.h> | 7 | //#include <unistd.h> |
8 | 8 | ||
9 | void data_extract_to_stdout(archive_handle_t *archive_handle) | 9 | void data_extract_to_stdout(archive_handle_t *archive_handle) |
10 | { | 10 | { |
11 | bb_copyfd_size(archive_handle->src_fd, STDOUT_FILENO, archive_handle->file_header->size); | 11 | bb_copyfd_exact_size(archive_handle->src_fd, |
12 | STDOUT_FILENO, | ||
13 | archive_handle->file_header->size); | ||
12 | } | 14 | } |
diff --git a/archival/libunarchive/get_header_ar.c b/archival/libunarchive/get_header_ar.c index 7f8c81ca0..6638c65aa 100644 --- a/archival/libunarchive/get_header_ar.c +++ b/archival/libunarchive/get_header_ar.c | |||
@@ -96,7 +96,8 @@ char get_header_ar(archive_handle_t *archive_handle) | |||
96 | if (archive_handle->filter(archive_handle) == EXIT_SUCCESS) { | 96 | if (archive_handle->filter(archive_handle) == EXIT_SUCCESS) { |
97 | archive_handle->action_header(typed); | 97 | archive_handle->action_header(typed); |
98 | if (archive_handle->sub_archive) { | 98 | if (archive_handle->sub_archive) { |
99 | while (archive_handle->action_data_subarchive(archive_handle->sub_archive) == EXIT_SUCCESS); | 99 | while (archive_handle->action_data_subarchive(archive_handle->sub_archive) == EXIT_SUCCESS) |
100 | /* repeat */; | ||
100 | } else { | 101 | } else { |
101 | archive_handle->action_data(archive_handle); | 102 | archive_handle->action_data(archive_handle); |
102 | } | 103 | } |
diff --git a/archival/libunarchive/get_header_tar.c b/archival/libunarchive/get_header_tar.c index 66c3314a1..beb8687c7 100644 --- a/archival/libunarchive/get_header_tar.c +++ b/archival/libunarchive/get_header_tar.c | |||
@@ -251,7 +251,7 @@ char get_header_tar(archive_handle_t *archive_handle) | |||
251 | } | 251 | } |
252 | 252 | ||
253 | /* Strip trailing '/' in directories */ | 253 | /* Strip trailing '/' in directories */ |
254 | /* Must be done after mode is set as '/' is used to check if its a directory */ | 254 | /* Must be done after mode is set as '/' is used to check if it's a directory */ |
255 | cp = last_char_is(file_header->name, '/'); | 255 | cp = last_char_is(file_header->name, '/'); |
256 | 256 | ||
257 | if (archive_handle->filter(archive_handle) == EXIT_SUCCESS) { | 257 | if (archive_handle->filter(archive_handle) == EXIT_SUCCESS) { |
diff --git a/archival/libunarchive/seek_by_read.c b/archival/libunarchive/seek_by_read.c index d56f94b21..e46af4842 100644 --- a/archival/libunarchive/seek_by_read.c +++ b/archival/libunarchive/seek_by_read.c | |||
@@ -13,7 +13,6 @@ | |||
13 | */ | 13 | */ |
14 | void seek_by_read(const archive_handle_t *archive_handle, const unsigned int jump_size) | 14 | void seek_by_read(const archive_handle_t *archive_handle, const unsigned int jump_size) |
15 | { | 15 | { |
16 | if (jump_size) { | 16 | if (jump_size) |
17 | bb_copyfd_size(archive_handle->src_fd, -1, jump_size); | 17 | bb_copyfd_exact_size(archive_handle->src_fd, -1, jump_size); |
18 | } | ||
19 | } | 18 | } |