aboutsummaryrefslogtreecommitdiff
path: root/archival/unzip.c
diff options
context:
space:
mode:
authorbug1 <bug1@69ca8d6d-28ef-0310-b511-8ec308f3f277>2002-11-03 14:05:15 +0000
committerbug1 <bug1@69ca8d6d-28ef-0310-b511-8ec308f3f277>2002-11-03 14:05:15 +0000
commit2967488be46c8e0454faf05f966826f9cfb9b746 (patch)
tree3fb6a9c10150303aca3c218b47aaf327a186382a /archival/unzip.c
parent76351c0a9c44f998dd9be624435bf96392c4e088 (diff)
downloadbusybox-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.c15
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 }