diff options
Diffstat (limited to 'archival/bbunzip.c')
-rw-r--r-- | archival/bbunzip.c | 56 |
1 files changed, 21 insertions, 35 deletions
diff --git a/archival/bbunzip.c b/archival/bbunzip.c index 86adb6e24..08db2752c 100644 --- a/archival/bbunzip.c +++ b/archival/bbunzip.c | |||
@@ -27,9 +27,15 @@ int open_to_or_warn(int to_fd, const char *filename, int flags, int mode) | |||
27 | return 0; | 27 | return 0; |
28 | } | 28 | } |
29 | 29 | ||
30 | char* FAST_FUNC append_ext(char *filename, const char *expected_ext) | ||
31 | { | ||
32 | return xasprintf("%s.%s", filename, expected_ext); | ||
33 | } | ||
34 | |||
30 | int FAST_FUNC bbunpack(char **argv, | 35 | int FAST_FUNC bbunpack(char **argv, |
31 | char* (*make_new_name)(char *filename), | 36 | IF_DESKTOP(long long) int FAST_FUNC (*unpacker)(unpack_info_t *info), |
32 | IF_DESKTOP(long long) int (*unpacker)(unpack_info_t *info) | 37 | char* FAST_FUNC (*make_new_name)(char *filename, const char *expected_ext), |
38 | const char *expected_ext | ||
33 | ) | 39 | ) |
34 | { | 40 | { |
35 | struct stat stat_buf; | 41 | struct stat stat_buf; |
@@ -68,7 +74,7 @@ int FAST_FUNC bbunpack(char **argv, | |||
68 | 74 | ||
69 | /* Open dst if we are going to unpack to file */ | 75 | /* Open dst if we are going to unpack to file */ |
70 | if (filename) { | 76 | if (filename) { |
71 | new_name = make_new_name(filename); | 77 | new_name = make_new_name(filename, expected_ext); |
72 | if (!new_name) { | 78 | if (!new_name) { |
73 | bb_error_msg("%s: unknown suffix - ignored", filename); | 79 | bb_error_msg("%s: unknown suffix - ignored", filename); |
74 | goto err; | 80 | goto err; |
@@ -142,7 +148,7 @@ int FAST_FUNC bbunpack(char **argv, | |||
142 | 148 | ||
143 | #if ENABLE_UNCOMPRESS || ENABLE_BUNZIP2 || ENABLE_UNLZMA || ENABLE_UNXZ | 149 | #if ENABLE_UNCOMPRESS || ENABLE_BUNZIP2 || ENABLE_UNLZMA || ENABLE_UNXZ |
144 | static | 150 | static |
145 | char* make_new_name_generic(char *filename, const char *expected_ext) | 151 | char* FAST_FUNC make_new_name_generic(char *filename, const char *expected_ext) |
146 | { | 152 | { |
147 | char *extension = strrchr(filename, '.'); | 153 | char *extension = strrchr(filename, '.'); |
148 | if (!extension || strcmp(extension + 1, expected_ext) != 0) { | 154 | if (!extension || strcmp(extension + 1, expected_ext) != 0) { |
@@ -163,12 +169,7 @@ char* make_new_name_generic(char *filename, const char *expected_ext) | |||
163 | */ | 169 | */ |
164 | #if ENABLE_UNCOMPRESS | 170 | #if ENABLE_UNCOMPRESS |
165 | static | 171 | static |
166 | char* make_new_name_uncompress(char *filename) | 172 | IF_DESKTOP(long long) int FAST_FUNC unpack_uncompress(unpack_info_t *info UNUSED_PARAM) |
167 | { | ||
168 | return make_new_name_generic(filename, "Z"); | ||
169 | } | ||
170 | static | ||
171 | IF_DESKTOP(long long) int unpack_uncompress(unpack_info_t *info UNUSED_PARAM) | ||
172 | { | 173 | { |
173 | IF_DESKTOP(long long) int status = -1; | 174 | IF_DESKTOP(long long) int status = -1; |
174 | 175 | ||
@@ -185,7 +186,7 @@ int uncompress_main(int argc UNUSED_PARAM, char **argv) | |||
185 | getopt32(argv, "cf"); | 186 | getopt32(argv, "cf"); |
186 | argv += optind; | 187 | argv += optind; |
187 | 188 | ||
188 | return bbunpack(argv, make_new_name_uncompress, unpack_uncompress); | 189 | return bbunpack(argv, unpack_uncompress, make_new_name_generic, "Z"); |
189 | } | 190 | } |
190 | #endif | 191 | #endif |
191 | 192 | ||
@@ -219,7 +220,7 @@ int uncompress_main(int argc UNUSED_PARAM, char **argv) | |||
219 | */ | 220 | */ |
220 | #if ENABLE_GUNZIP | 221 | #if ENABLE_GUNZIP |
221 | static | 222 | static |
222 | char* make_new_name_gunzip(char *filename) | 223 | char* FAST_FUNC make_new_name_gunzip(char *filename, const char *expected_ext UNUSED_PARAM) |
223 | { | 224 | { |
224 | char *extension = strrchr(filename, '.'); | 225 | char *extension = strrchr(filename, '.'); |
225 | 226 | ||
@@ -244,7 +245,7 @@ char* make_new_name_gunzip(char *filename) | |||
244 | return filename; | 245 | return filename; |
245 | } | 246 | } |
246 | static | 247 | static |
247 | IF_DESKTOP(long long) int unpack_gunzip(unpack_info_t *info) | 248 | IF_DESKTOP(long long) int FAST_FUNC unpack_gunzip(unpack_info_t *info) |
248 | { | 249 | { |
249 | IF_DESKTOP(long long) int status = -1; | 250 | IF_DESKTOP(long long) int status = -1; |
250 | 251 | ||
@@ -292,7 +293,7 @@ int gunzip_main(int argc UNUSED_PARAM, char **argv) | |||
292 | if (applet_name[1] == 'c') | 293 | if (applet_name[1] == 'c') |
293 | option_mask32 |= OPT_STDOUT; | 294 | option_mask32 |= OPT_STDOUT; |
294 | 295 | ||
295 | return bbunpack(argv, make_new_name_gunzip, unpack_gunzip); | 296 | return bbunpack(argv, unpack_gunzip, make_new_name_gunzip, /*unused:*/ NULL); |
296 | } | 297 | } |
297 | #endif | 298 | #endif |
298 | 299 | ||
@@ -305,12 +306,7 @@ int gunzip_main(int argc UNUSED_PARAM, char **argv) | |||
305 | */ | 306 | */ |
306 | #if ENABLE_BUNZIP2 | 307 | #if ENABLE_BUNZIP2 |
307 | static | 308 | static |
308 | char* make_new_name_bunzip2(char *filename) | 309 | IF_DESKTOP(long long) int FAST_FUNC unpack_bunzip2(unpack_info_t *info UNUSED_PARAM) |
309 | { | ||
310 | return make_new_name_generic(filename, "bz2"); | ||
311 | } | ||
312 | static | ||
313 | IF_DESKTOP(long long) int unpack_bunzip2(unpack_info_t *info UNUSED_PARAM) | ||
314 | { | 310 | { |
315 | return unpack_bz2_stream_prime(STDIN_FILENO, STDOUT_FILENO); | 311 | return unpack_bz2_stream_prime(STDIN_FILENO, STDOUT_FILENO); |
316 | } | 312 | } |
@@ -322,7 +318,7 @@ int bunzip2_main(int argc UNUSED_PARAM, char **argv) | |||
322 | if (applet_name[2] == 'c') /* bzcat */ | 318 | if (applet_name[2] == 'c') /* bzcat */ |
323 | option_mask32 |= OPT_STDOUT; | 319 | option_mask32 |= OPT_STDOUT; |
324 | 320 | ||
325 | return bbunpack(argv, make_new_name_bunzip2, unpack_bunzip2); | 321 | return bbunpack(argv, unpack_bunzip2, make_new_name_generic, "bz2"); |
326 | } | 322 | } |
327 | #endif | 323 | #endif |
328 | 324 | ||
@@ -337,12 +333,7 @@ int bunzip2_main(int argc UNUSED_PARAM, char **argv) | |||
337 | */ | 333 | */ |
338 | #if ENABLE_UNLZMA | 334 | #if ENABLE_UNLZMA |
339 | static | 335 | static |
340 | char* make_new_name_unlzma(char *filename) | 336 | IF_DESKTOP(long long) int FAST_FUNC unpack_unlzma(unpack_info_t *info UNUSED_PARAM) |
341 | { | ||
342 | return make_new_name_generic(filename, "lzma"); | ||
343 | } | ||
344 | static | ||
345 | IF_DESKTOP(long long) int unpack_unlzma(unpack_info_t *info UNUSED_PARAM) | ||
346 | { | 337 | { |
347 | return unpack_lzma_stream(STDIN_FILENO, STDOUT_FILENO); | 338 | return unpack_lzma_stream(STDIN_FILENO, STDOUT_FILENO); |
348 | } | 339 | } |
@@ -360,19 +351,14 @@ int unlzma_main(int argc UNUSED_PARAM, char **argv) | |||
360 | option_mask32 |= OPT_STDOUT; | 351 | option_mask32 |= OPT_STDOUT; |
361 | 352 | ||
362 | argv += optind; | 353 | argv += optind; |
363 | return bbunpack(argv, make_new_name_unlzma, unpack_unlzma); | 354 | return bbunpack(argv, unpack_unlzma, make_new_name_generic, "lzma"); |
364 | } | 355 | } |
365 | #endif | 356 | #endif |
366 | 357 | ||
367 | 358 | ||
368 | #if ENABLE_UNXZ | 359 | #if ENABLE_UNXZ |
369 | static | 360 | static |
370 | char* make_new_name_unxz(char *filename) | 361 | IF_DESKTOP(long long) int FAST_FUNC unpack_unxz(unpack_info_t *info UNUSED_PARAM) |
371 | { | ||
372 | return make_new_name_generic(filename, "xz"); | ||
373 | } | ||
374 | static | ||
375 | IF_DESKTOP(long long) int unpack_unxz(unpack_info_t *info UNUSED_PARAM) | ||
376 | { | 362 | { |
377 | return unpack_xz_stream(STDIN_FILENO, STDOUT_FILENO); | 363 | return unpack_xz_stream(STDIN_FILENO, STDOUT_FILENO); |
378 | } | 364 | } |
@@ -390,6 +376,6 @@ int unxz_main(int argc UNUSED_PARAM, char **argv) | |||
390 | option_mask32 |= OPT_STDOUT; | 376 | option_mask32 |= OPT_STDOUT; |
391 | 377 | ||
392 | argv += optind; | 378 | argv += optind; |
393 | return bbunpack(argv, make_new_name_unxz, unpack_unxz); | 379 | return bbunpack(argv, unpack_unxz, make_new_name_generic, "xz"); |
394 | } | 380 | } |
395 | #endif | 381 | #endif |