diff options
author | bug1 <bug1@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2002-11-03 14:05:15 +0000 |
---|---|---|
committer | bug1 <bug1@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2002-11-03 14:05:15 +0000 |
commit | 2967488be46c8e0454faf05f966826f9cfb9b746 (patch) | |
tree | 3fb6a9c10150303aca3c218b47aaf327a186382a /archival/unzip.c | |
parent | 76351c0a9c44f998dd9be624435bf96392c4e088 (diff) | |
download | busybox-w32-2967488be46c8e0454faf05f966826f9cfb9b746.tar.gz busybox-w32-2967488be46c8e0454faf05f966826f9cfb9b746.tar.bz2 busybox-w32-2967488be46c8e0454faf05f966826f9cfb9b746.zip |
Abstract read and seek in unarchiving code, convert bunzip to file descriptors, support tar -j
git-svn-id: svn://busybox.net/trunk/busybox@5787 69ca8d6d-28ef-0310-b511-8ec308f3f277
Diffstat (limited to 'archival/unzip.c')
-rw-r--r-- | archival/unzip.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/archival/unzip.c b/archival/unzip.c index 5a22d242a..4c1e5ce40 100644 --- a/archival/unzip.c +++ b/archival/unzip.c | |||
@@ -136,13 +136,14 @@ extern int unzip_main(int argc, char **argv) | |||
136 | 136 | ||
137 | if (*argv[optind] == '-') { | 137 | if (*argv[optind] == '-') { |
138 | archive_handle->src_fd = fileno(stdin); | 138 | archive_handle->src_fd = fileno(stdin); |
139 | } else { | 139 | archive_handle->seek = seek_by_char; |
140 | } else { | ||
140 | archive_handle->src_fd = xopen(argv[optind++], O_RDONLY); | 141 | archive_handle->src_fd = xopen(argv[optind++], O_RDONLY); |
141 | } | 142 | } |
142 | 143 | ||
143 | if ((base_dir) && (chdir(base_dir))) { | 144 | if ((base_dir) && (chdir(base_dir))) { |
144 | perror_msg_and_die("Couldnt chdir"); | 145 | perror_msg_and_die("Couldnt chdir"); |
145 | } | 146 | } |
146 | 147 | ||
147 | while (optind < argc) { | 148 | while (optind < argc) { |
148 | archive_handle->filter = filter_accept_list; | 149 | archive_handle->filter = filter_accept_list; |
@@ -155,7 +156,7 @@ extern int unzip_main(int argc, char **argv) | |||
155 | int dst_fd; | 156 | int dst_fd; |
156 | 157 | ||
157 | /* TODO Endian issues */ | 158 | /* TODO Endian issues */ |
158 | xread_all(archive_handle->src_fd, &magic, 4); | 159 | archive_xread_all(archive_handle, &magic, 4); |
159 | archive_handle->offset += 4; | 160 | archive_handle->offset += 4; |
160 | 161 | ||
161 | if (magic == ZIP_CDS_MAGIC) { | 162 | if (magic == ZIP_CDS_MAGIC) { |
@@ -166,7 +167,7 @@ extern int unzip_main(int argc, char **argv) | |||
166 | } | 167 | } |
167 | 168 | ||
168 | /* Read the file header */ | 169 | /* Read the file header */ |
169 | xread_all(archive_handle->src_fd, zip_header.raw, 26); | 170 | archive_xread_all(archive_handle, zip_header.raw, 26); |
170 | archive_handle->offset += 26; | 171 | archive_handle->offset += 26; |
171 | archive_handle->file_header->mode = S_IFREG | 0777; | 172 | archive_handle->file_header->mode = S_IFREG | 0777; |
172 | 173 | ||
@@ -176,7 +177,7 @@ extern int unzip_main(int argc, char **argv) | |||
176 | 177 | ||
177 | /* Read filename */ | 178 | /* Read filename */ |
178 | archive_handle->file_header->name = xmalloc(zip_header.formated.filename_len + 1); | 179 | archive_handle->file_header->name = xmalloc(zip_header.formated.filename_len + 1); |
179 | xread_all(archive_handle->src_fd, archive_handle->file_header->name, zip_header.formated.filename_len); | 180 | archive_xread_all(archive_handle, archive_handle->file_header->name, zip_header.formated.filename_len); |
180 | archive_handle->offset += zip_header.formated.filename_len; | 181 | archive_handle->offset += zip_header.formated.filename_len; |
181 | archive_handle->file_header->name[zip_header.formated.filename_len] = '\0'; | 182 | archive_handle->file_header->name[zip_header.formated.filename_len] = '\0'; |
182 | 183 | ||
@@ -228,7 +229,7 @@ extern int unzip_main(int argc, char **argv) | |||
228 | /* skip over duplicate crc, compressed size and uncompressed size */ | 229 | /* skip over duplicate crc, compressed size and uncompressed size */ |
229 | unsigned short i; | 230 | unsigned short i; |
230 | for (i = 0; i != 12; i++) { | 231 | for (i = 0; i != 12; i++) { |
231 | xread_char(archive_handle->src_fd); | 232 | archive_xread_char(archive_handle); |
232 | } | 233 | } |
233 | archive_handle->offset += 12; | 234 | archive_handle->offset += 12; |
234 | } | 235 | } |