aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2010-05-31 14:18:57 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2010-05-31 14:18:57 +0200
commit39a04f71ca8ccf81de2cdbd538df519cf34ef2e6 (patch)
tree01b85baa36d95c48924c3688f8a8f9e0c96ba04a
parentb8b72f02f01017d0f9584666fa572221f2b58613 (diff)
downloadbusybox-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.c56
-rw-r--r--archival/bzip2.c10
-rw-r--r--archival/gzip.c12
-rw-r--r--archival/lzop.c6
-rw-r--r--include/unarchive.h7
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
30char* FAST_FUNC append_ext(char *filename, const char *expected_ext)
31{
32 return xasprintf("%s.%s", filename, expected_ext);
33}
34
30int FAST_FUNC bbunpack(char **argv, 35int 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
144static 150static
145char* make_new_name_generic(char *filename, const char *expected_ext) 151char* 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
165static 171static
166char* make_new_name_uncompress(char *filename) 172IF_DESKTOP(long long) int FAST_FUNC unpack_uncompress(unpack_info_t *info UNUSED_PARAM)
167{
168 return make_new_name_generic(filename, "Z");
169}
170static
171IF_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
221static 222static
222char* make_new_name_gunzip(char *filename) 223char* 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}
246static 247static
247IF_DESKTOP(long long) int unpack_gunzip(unpack_info_t *info) 248IF_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
307static 308static
308char* make_new_name_bunzip2(char *filename) 309IF_DESKTOP(long long) int FAST_FUNC unpack_bunzip2(unpack_info_t *info UNUSED_PARAM)
309{
310 return make_new_name_generic(filename, "bz2");
311}
312static
313IF_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
339static 335static
340char* make_new_name_unlzma(char *filename) 336IF_DESKTOP(long long) int FAST_FUNC unpack_unlzma(unpack_info_t *info UNUSED_PARAM)
341{
342 return make_new_name_generic(filename, "lzma");
343}
344static
345IF_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
369static 360static
370char* make_new_name_unxz(char *filename) 361IF_DESKTOP(long long) int FAST_FUNC unpack_unxz(unpack_info_t *info UNUSED_PARAM)
371{
372 return make_new_name_generic(filename, "xz");
373}
374static
375IF_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
104static 104static
105IF_DESKTOP(long long) int compressStream(unpack_info_t *info UNUSED_PARAM) 105IF_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
138static
139char* make_new_name_bzip2(char *filename)
140{
141 return xasprintf("%s.bz2", filename);
142}
143
144int bzip2_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 138int bzip2_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
145int bzip2_main(int argc UNUSED_PARAM, char **argv) 139int 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/* ======================================================================== */
2000static 2000static
2001char* make_new_name_gzip(char *filename) 2001IF_DESKTOP(long long) int FAST_FUNC pack_gzip(unpack_info_t *info UNUSED_PARAM)
2002{
2003 return xasprintf("%s.gz", filename);
2004}
2005
2006static
2007IF_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
1045static char* make_new_name_lzop(char *filename) 1045static 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
1057static IF_DESKTOP(long long) int pack_lzop(unpack_info_t *info UNUSED_PARAM) 1057static 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" */
156IF_DESKTOP(long long) int unpack_bz2_stream_prime(int src_fd, int dst_fd) FAST_FUNC; 156IF_DESKTOP(long long) int unpack_bz2_stream_prime(int src_fd, int dst_fd) FAST_FUNC;
157 157
158char* append_ext(char *filename, const char *expected_ext) FAST_FUNC;
158int bbunpack(char **argv, 159int 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
163void open_transformer(int fd, 166void open_transformer(int fd,