summaryrefslogtreecommitdiff
path: root/archival/bbunzip.c
diff options
context:
space:
mode:
authorDenys Vlasenko2010-05-31 14:18:57 +0200
committerDenys Vlasenko2010-05-31 14:18:57 +0200
commit39a04f71ca8ccf81de2cdbd538df519cf34ef2e6 (patch)
tree01b85baa36d95c48924c3688f8a8f9e0c96ba04a /archival/bbunzip.c
parentb8b72f02f01017d0f9584666fa572221f2b58613 (diff)
downloadbusybox-39a04f71ca8ccf81de2cdbd538df519cf34ef2e6.zip
busybox-39a04f71ca8ccf81de2cdbd538df519cf34ef2e6.tar.gz
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>
Diffstat (limited to 'archival/bbunzip.c')
-rw-r--r--archival/bbunzip.c56
1 files changed, 21 insertions, 35 deletions
diff --git a/archival/bbunzip.c b/archival/bbunzip.c
index 86adb6e..08db275 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)
return 0;
}
+char* FAST_FUNC append_ext(char *filename, const char *expected_ext)
+{
+ return xasprintf("%s.%s", filename, expected_ext);
+}
+
int FAST_FUNC bbunpack(char **argv,
- char* (*make_new_name)(char *filename),
- IF_DESKTOP(long long) int (*unpacker)(unpack_info_t *info)
+ IF_DESKTOP(long long) int FAST_FUNC (*unpacker)(unpack_info_t *info),
+ char* FAST_FUNC (*make_new_name)(char *filename, const char *expected_ext),
+ const char *expected_ext
)
{
struct stat stat_buf;
@@ -68,7 +74,7 @@ int FAST_FUNC bbunpack(char **argv,
/* Open dst if we are going to unpack to file */
if (filename) {
- new_name = make_new_name(filename);
+ new_name = make_new_name(filename, expected_ext);
if (!new_name) {
bb_error_msg("%s: unknown suffix - ignored", filename);
goto err;
@@ -142,7 +148,7 @@ int FAST_FUNC bbunpack(char **argv,
#if ENABLE_UNCOMPRESS || ENABLE_BUNZIP2 || ENABLE_UNLZMA || ENABLE_UNXZ
static
-char* make_new_name_generic(char *filename, const char *expected_ext)
+char* FAST_FUNC make_new_name_generic(char *filename, const char *expected_ext)
{
char *extension = strrchr(filename, '.');
if (!extension || strcmp(extension + 1, expected_ext) != 0) {
@@ -163,12 +169,7 @@ char* make_new_name_generic(char *filename, const char *expected_ext)
*/
#if ENABLE_UNCOMPRESS
static
-char* make_new_name_uncompress(char *filename)
-{
- return make_new_name_generic(filename, "Z");
-}
-static
-IF_DESKTOP(long long) int unpack_uncompress(unpack_info_t *info UNUSED_PARAM)
+IF_DESKTOP(long long) int FAST_FUNC unpack_uncompress(unpack_info_t *info UNUSED_PARAM)
{
IF_DESKTOP(long long) int status = -1;
@@ -185,7 +186,7 @@ int uncompress_main(int argc UNUSED_PARAM, char **argv)
getopt32(argv, "cf");
argv += optind;
- return bbunpack(argv, make_new_name_uncompress, unpack_uncompress);
+ return bbunpack(argv, unpack_uncompress, make_new_name_generic, "Z");
}
#endif
@@ -219,7 +220,7 @@ int uncompress_main(int argc UNUSED_PARAM, char **argv)
*/
#if ENABLE_GUNZIP
static
-char* make_new_name_gunzip(char *filename)
+char* FAST_FUNC make_new_name_gunzip(char *filename, const char *expected_ext UNUSED_PARAM)
{
char *extension = strrchr(filename, '.');
@@ -244,7 +245,7 @@ char* make_new_name_gunzip(char *filename)
return filename;
}
static
-IF_DESKTOP(long long) int unpack_gunzip(unpack_info_t *info)
+IF_DESKTOP(long long) int FAST_FUNC unpack_gunzip(unpack_info_t *info)
{
IF_DESKTOP(long long) int status = -1;
@@ -292,7 +293,7 @@ int gunzip_main(int argc UNUSED_PARAM, char **argv)
if (applet_name[1] == 'c')
option_mask32 |= OPT_STDOUT;
- return bbunpack(argv, make_new_name_gunzip, unpack_gunzip);
+ return bbunpack(argv, unpack_gunzip, make_new_name_gunzip, /*unused:*/ NULL);
}
#endif
@@ -305,12 +306,7 @@ int gunzip_main(int argc UNUSED_PARAM, char **argv)
*/
#if ENABLE_BUNZIP2
static
-char* make_new_name_bunzip2(char *filename)
-{
- return make_new_name_generic(filename, "bz2");
-}
-static
-IF_DESKTOP(long long) int unpack_bunzip2(unpack_info_t *info UNUSED_PARAM)
+IF_DESKTOP(long long) int FAST_FUNC unpack_bunzip2(unpack_info_t *info UNUSED_PARAM)
{
return unpack_bz2_stream_prime(STDIN_FILENO, STDOUT_FILENO);
}
@@ -322,7 +318,7 @@ int bunzip2_main(int argc UNUSED_PARAM, char **argv)
if (applet_name[2] == 'c') /* bzcat */
option_mask32 |= OPT_STDOUT;
- return bbunpack(argv, make_new_name_bunzip2, unpack_bunzip2);
+ return bbunpack(argv, unpack_bunzip2, make_new_name_generic, "bz2");
}
#endif
@@ -337,12 +333,7 @@ int bunzip2_main(int argc UNUSED_PARAM, char **argv)
*/
#if ENABLE_UNLZMA
static
-char* make_new_name_unlzma(char *filename)
-{
- return make_new_name_generic(filename, "lzma");
-}
-static
-IF_DESKTOP(long long) int unpack_unlzma(unpack_info_t *info UNUSED_PARAM)
+IF_DESKTOP(long long) int FAST_FUNC unpack_unlzma(unpack_info_t *info UNUSED_PARAM)
{
return unpack_lzma_stream(STDIN_FILENO, STDOUT_FILENO);
}
@@ -360,19 +351,14 @@ int unlzma_main(int argc UNUSED_PARAM, char **argv)
option_mask32 |= OPT_STDOUT;
argv += optind;
- return bbunpack(argv, make_new_name_unlzma, unpack_unlzma);
+ return bbunpack(argv, unpack_unlzma, make_new_name_generic, "lzma");
}
#endif
#if ENABLE_UNXZ
static
-char* make_new_name_unxz(char *filename)
-{
- return make_new_name_generic(filename, "xz");
-}
-static
-IF_DESKTOP(long long) int unpack_unxz(unpack_info_t *info UNUSED_PARAM)
+IF_DESKTOP(long long) int FAST_FUNC unpack_unxz(unpack_info_t *info UNUSED_PARAM)
{
return unpack_xz_stream(STDIN_FILENO, STDOUT_FILENO);
}
@@ -390,6 +376,6 @@ int unxz_main(int argc UNUSED_PARAM, char **argv)
option_mask32 |= OPT_STDOUT;
argv += optind;
- return bbunpack(argv, make_new_name_unxz, unpack_unxz);
+ return bbunpack(argv, unpack_unxz, make_new_name_generic, "xz");
}
#endif