diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2010-05-31 14:18:57 +0200 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-05-31 14:18:57 +0200 |
| commit | 39a04f71ca8ccf81de2cdbd538df519cf34ef2e6 (patch) | |
| tree | 01b85baa36d95c48924c3688f8a8f9e0c96ba04a | |
| parent | b8b72f02f01017d0f9584666fa572221f2b58613 (diff) | |
| download | busybox-w32-39a04f71ca8ccf81de2cdbd538df519cf34ef2e6.tar.gz busybox-w32-39a04f71ca8ccf81de2cdbd538df519cf34ef2e6.tar.bz2 busybox-w32-39a04f71ca8ccf81de2cdbd538df519cf34ef2e6.zip | |
archival/*: shrink by reusing sufficiently similar functions
function old new delta
append_ext - 16 +16
unxz_main 77 83 +6
unlzma_main 77 83 +6
uncompress_main 42 48 +6
gzip_main 184 190 +6
bzip2_main 114 120 +6
bunzip2_main 61 67 +6
bbunpack 469 475 +6
send_tree 355 360 +5
lzop_main 89 92 +3
gunzip_main 61 64 +3
make_new_name_lzop 84 82 -2
make_new_name_gunzip 114 112 -2
make_new_name_unxz 14 - -14
make_new_name_unlzma 14 - -14
make_new_name_uncompress 14 - -14
make_new_name_bunzip2 14 - -14
make_new_name_gzip 17 - -17
make_new_name_bzip2 17 - -17
------------------------------------------------------------------------------
(add/remove: 1/6 grow/shrink: 10/2 up/down: 69/-94) Total: -25 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| -rw-r--r-- | archival/bbunzip.c | 56 | ||||
| -rw-r--r-- | archival/bzip2.c | 10 | ||||
| -rw-r--r-- | archival/gzip.c | 12 | ||||
| -rw-r--r-- | archival/lzop.c | 6 | ||||
| -rw-r--r-- | include/unarchive.h | 7 |
5 files changed, 34 insertions, 57 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 |
diff --git a/archival/bzip2.c b/archival/bzip2.c index bbaf56669..f1c84d681 100644 --- a/archival/bzip2.c +++ b/archival/bzip2.c | |||
| @@ -102,7 +102,7 @@ IF_DESKTOP(long long) int bz_write(bz_stream *strm, void* rbuf, ssize_t rlen, vo | |||
| 102 | } | 102 | } |
| 103 | 103 | ||
| 104 | static | 104 | static |
| 105 | IF_DESKTOP(long long) int compressStream(unpack_info_t *info UNUSED_PARAM) | 105 | IF_DESKTOP(long long) int FAST_FUNC compressStream(unpack_info_t *info UNUSED_PARAM) |
| 106 | { | 106 | { |
| 107 | IF_DESKTOP(long long) int total; | 107 | IF_DESKTOP(long long) int total; |
| 108 | ssize_t count; | 108 | ssize_t count; |
| @@ -135,12 +135,6 @@ IF_DESKTOP(long long) int compressStream(unpack_info_t *info UNUSED_PARAM) | |||
| 135 | return total; | 135 | return total; |
| 136 | } | 136 | } |
| 137 | 137 | ||
| 138 | static | ||
| 139 | char* make_new_name_bzip2(char *filename) | ||
| 140 | { | ||
| 141 | return xasprintf("%s.bz2", filename); | ||
| 142 | } | ||
| 143 | |||
| 144 | int bzip2_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 138 | int bzip2_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
| 145 | int bzip2_main(int argc UNUSED_PARAM, char **argv) | 139 | int bzip2_main(int argc UNUSED_PARAM, char **argv) |
| 146 | { | 140 | { |
| @@ -181,5 +175,5 @@ int bzip2_main(int argc UNUSED_PARAM, char **argv) | |||
| 181 | 175 | ||
| 182 | argv += optind; | 176 | argv += optind; |
| 183 | option_mask32 &= 0x7; /* ignore all except -cfv */ | 177 | option_mask32 &= 0x7; /* ignore all except -cfv */ |
| 184 | return bbunpack(argv, make_new_name_bzip2, compressStream); | 178 | return bbunpack(argv, compressStream, append_ext, "bz2"); |
| 185 | } | 179 | } |
diff --git a/archival/gzip.c b/archival/gzip.c index a327d5435..5cc553a80 100644 --- a/archival/gzip.c +++ b/archival/gzip.c | |||
| @@ -1998,13 +1998,7 @@ static void zip(ulg time_stamp) | |||
| 1998 | 1998 | ||
| 1999 | /* ======================================================================== */ | 1999 | /* ======================================================================== */ |
| 2000 | static | 2000 | static |
| 2001 | char* make_new_name_gzip(char *filename) | 2001 | IF_DESKTOP(long long) int FAST_FUNC pack_gzip(unpack_info_t *info UNUSED_PARAM) |
| 2002 | { | ||
| 2003 | return xasprintf("%s.gz", filename); | ||
| 2004 | } | ||
| 2005 | |||
| 2006 | static | ||
| 2007 | IF_DESKTOP(long long) int pack_gzip(unpack_info_t *info UNUSED_PARAM) | ||
| 2008 | { | 2002 | { |
| 2009 | struct stat s; | 2003 | struct stat s; |
| 2010 | 2004 | ||
| @@ -2063,7 +2057,7 @@ static const char gzip_longopts[] ALIGN1 = | |||
| 2063 | #endif | 2057 | #endif |
| 2064 | 2058 | ||
| 2065 | /* | 2059 | /* |
| 2066 | * Linux kernel build uses gzip -d -n. We accept and ignore it. | 2060 | * Linux kernel build uses gzip -d -n. We accept and ignore -n. |
| 2067 | * Man page says: | 2061 | * Man page says: |
| 2068 | * -n --no-name | 2062 | * -n --no-name |
| 2069 | * gzip: do not save the original file name and time stamp. | 2063 | * gzip: do not save the original file name and time stamp. |
| @@ -2113,5 +2107,5 @@ int gzip_main(int argc UNUSED_PARAM, char **argv) | |||
| 2113 | /* Initialise the CRC32 table */ | 2107 | /* Initialise the CRC32 table */ |
| 2114 | G1.crc_32_tab = crc32_filltable(NULL, 0); | 2108 | G1.crc_32_tab = crc32_filltable(NULL, 0); |
| 2115 | 2109 | ||
| 2116 | return bbunpack(argv, make_new_name_gzip, pack_gzip); | 2110 | return bbunpack(argv, pack_gzip, append_ext, "gz"); |
| 2117 | } | 2111 | } |
diff --git a/archival/lzop.c b/archival/lzop.c index ceace0436..ab4d34c88 100644 --- a/archival/lzop.c +++ b/archival/lzop.c | |||
| @@ -1042,7 +1042,7 @@ static smallint do_lzo_decompress(void) | |||
| 1042 | return lzo_decompress(&header); | 1042 | return lzo_decompress(&header); |
| 1043 | } | 1043 | } |
| 1044 | 1044 | ||
| 1045 | static char* make_new_name_lzop(char *filename) | 1045 | static char* FAST_FUNC make_new_name_lzop(char *filename, const char *expected_ext UNUSED_PARAM) |
| 1046 | { | 1046 | { |
| 1047 | if (option_mask32 & OPT_DECOMPRESS) { | 1047 | if (option_mask32 & OPT_DECOMPRESS) { |
| 1048 | char *extension = strrchr(filename, '.'); | 1048 | char *extension = strrchr(filename, '.'); |
| @@ -1054,7 +1054,7 @@ static char* make_new_name_lzop(char *filename) | |||
| 1054 | return xasprintf("%s.lzo", filename); | 1054 | return xasprintf("%s.lzo", filename); |
| 1055 | } | 1055 | } |
| 1056 | 1056 | ||
| 1057 | static IF_DESKTOP(long long) int pack_lzop(unpack_info_t *info UNUSED_PARAM) | 1057 | static IF_DESKTOP(long long) int FAST_FUNC pack_lzop(unpack_info_t *info UNUSED_PARAM) |
| 1058 | { | 1058 | { |
| 1059 | if (option_mask32 & OPT_DECOMPRESS) | 1059 | if (option_mask32 & OPT_DECOMPRESS) |
| 1060 | return do_lzo_decompress(); | 1060 | return do_lzo_decompress(); |
| @@ -1074,5 +1074,5 @@ int lzop_main(int argc UNUSED_PARAM, char **argv) | |||
| 1074 | option_mask32 |= OPT_DECOMPRESS; | 1074 | option_mask32 |= OPT_DECOMPRESS; |
| 1075 | 1075 | ||
| 1076 | G.lzo_crc32_table = crc32_filltable(NULL, 0); | 1076 | G.lzo_crc32_table = crc32_filltable(NULL, 0); |
| 1077 | return bbunpack(argv, make_new_name_lzop, pack_lzop); | 1077 | return bbunpack(argv, pack_lzop, make_new_name_lzop, /*unused:*/ NULL); |
| 1078 | } | 1078 | } |
diff --git a/include/unarchive.h b/include/unarchive.h index 783a943b6..aa7ecec55 100644 --- a/include/unarchive.h +++ b/include/unarchive.h | |||
| @@ -155,9 +155,12 @@ IF_DESKTOP(long long) int unpack_Z_stream(int src_fd, int dst_fd) FAST_FUNC; | |||
| 155 | /* wrapper which checks first two bytes to be "BZ" */ | 155 | /* wrapper which checks first two bytes to be "BZ" */ |
| 156 | IF_DESKTOP(long long) int unpack_bz2_stream_prime(int src_fd, int dst_fd) FAST_FUNC; | 156 | IF_DESKTOP(long long) int unpack_bz2_stream_prime(int src_fd, int dst_fd) FAST_FUNC; |
| 157 | 157 | ||
| 158 | char* append_ext(char *filename, const char *expected_ext) FAST_FUNC; | ||
| 158 | int bbunpack(char **argv, | 159 | int bbunpack(char **argv, |
| 159 | char* (*make_new_name)(char *filename), | 160 | IF_DESKTOP(long long) int FAST_FUNC (*unpacker)(unpack_info_t *info), |
| 160 | IF_DESKTOP(long long) int (*unpacker)(unpack_info_t *info)) FAST_FUNC; | 161 | char* FAST_FUNC (*make_new_name)(char *filename, const char *expected_ext), |
| 162 | const char *expected_ext | ||
| 163 | ) FAST_FUNC; | ||
| 161 | 164 | ||
| 162 | #if BB_MMU | 165 | #if BB_MMU |
| 163 | void open_transformer(int fd, | 166 | void open_transformer(int fd, |
