mirror of
https://github.com/sheumann/hush.git
synced 2024-08-20 04:28:57 +00:00
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>
This commit is contained in:
parent
b8b72f02f0
commit
39a04f71ca
@ -27,9 +27,15 @@ int open_to_or_warn(int to_fd, const char *filename, int flags, int mode)
|
|||||||
return 0;
|
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,
|
int FAST_FUNC bbunpack(char **argv,
|
||||||
char* (*make_new_name)(char *filename),
|
IF_DESKTOP(long long) int FAST_FUNC (*unpacker)(unpack_info_t *info),
|
||||||
IF_DESKTOP(long long) int (*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;
|
struct stat stat_buf;
|
||||||
@ -68,7 +74,7 @@ int FAST_FUNC bbunpack(char **argv,
|
|||||||
|
|
||||||
/* Open dst if we are going to unpack to file */
|
/* Open dst if we are going to unpack to file */
|
||||||
if (filename) {
|
if (filename) {
|
||||||
new_name = make_new_name(filename);
|
new_name = make_new_name(filename, expected_ext);
|
||||||
if (!new_name) {
|
if (!new_name) {
|
||||||
bb_error_msg("%s: unknown suffix - ignored", filename);
|
bb_error_msg("%s: unknown suffix - ignored", filename);
|
||||||
goto err;
|
goto err;
|
||||||
@ -142,7 +148,7 @@ int FAST_FUNC bbunpack(char **argv,
|
|||||||
|
|
||||||
#if ENABLE_UNCOMPRESS || ENABLE_BUNZIP2 || ENABLE_UNLZMA || ENABLE_UNXZ
|
#if ENABLE_UNCOMPRESS || ENABLE_BUNZIP2 || ENABLE_UNLZMA || ENABLE_UNXZ
|
||||||
static
|
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, '.');
|
char *extension = strrchr(filename, '.');
|
||||||
if (!extension || strcmp(extension + 1, expected_ext) != 0) {
|
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
|
#if ENABLE_UNCOMPRESS
|
||||||
static
|
static
|
||||||
char* make_new_name_uncompress(char *filename)
|
IF_DESKTOP(long long) int FAST_FUNC unpack_uncompress(unpack_info_t *info UNUSED_PARAM)
|
||||||
{
|
|
||||||
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 status = -1;
|
IF_DESKTOP(long long) int status = -1;
|
||||||
|
|
||||||
@ -185,7 +186,7 @@ int uncompress_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
getopt32(argv, "cf");
|
getopt32(argv, "cf");
|
||||||
argv += optind;
|
argv += optind;
|
||||||
|
|
||||||
return bbunpack(argv, make_new_name_uncompress, unpack_uncompress);
|
return bbunpack(argv, unpack_uncompress, make_new_name_generic, "Z");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -219,7 +220,7 @@ int uncompress_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
*/
|
*/
|
||||||
#if ENABLE_GUNZIP
|
#if ENABLE_GUNZIP
|
||||||
static
|
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, '.');
|
char *extension = strrchr(filename, '.');
|
||||||
|
|
||||||
@ -244,7 +245,7 @@ char* make_new_name_gunzip(char *filename)
|
|||||||
return filename;
|
return filename;
|
||||||
}
|
}
|
||||||
static
|
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;
|
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')
|
if (applet_name[1] == 'c')
|
||||||
option_mask32 |= OPT_STDOUT;
|
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
|
#endif
|
||||||
|
|
||||||
@ -305,12 +306,7 @@ int gunzip_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
*/
|
*/
|
||||||
#if ENABLE_BUNZIP2
|
#if ENABLE_BUNZIP2
|
||||||
static
|
static
|
||||||
char* make_new_name_bunzip2(char *filename)
|
IF_DESKTOP(long long) int FAST_FUNC unpack_bunzip2(unpack_info_t *info UNUSED_PARAM)
|
||||||
{
|
|
||||||
return make_new_name_generic(filename, "bz2");
|
|
||||||
}
|
|
||||||
static
|
|
||||||
IF_DESKTOP(long long) int unpack_bunzip2(unpack_info_t *info UNUSED_PARAM)
|
|
||||||
{
|
{
|
||||||
return unpack_bz2_stream_prime(STDIN_FILENO, STDOUT_FILENO);
|
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 */
|
if (applet_name[2] == 'c') /* bzcat */
|
||||||
option_mask32 |= OPT_STDOUT;
|
option_mask32 |= OPT_STDOUT;
|
||||||
|
|
||||||
return bbunpack(argv, make_new_name_bunzip2, unpack_bunzip2);
|
return bbunpack(argv, unpack_bunzip2, make_new_name_generic, "bz2");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -337,12 +333,7 @@ int bunzip2_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
*/
|
*/
|
||||||
#if ENABLE_UNLZMA
|
#if ENABLE_UNLZMA
|
||||||
static
|
static
|
||||||
char* make_new_name_unlzma(char *filename)
|
IF_DESKTOP(long long) int FAST_FUNC unpack_unlzma(unpack_info_t *info UNUSED_PARAM)
|
||||||
{
|
|
||||||
return make_new_name_generic(filename, "lzma");
|
|
||||||
}
|
|
||||||
static
|
|
||||||
IF_DESKTOP(long long) int unpack_unlzma(unpack_info_t *info UNUSED_PARAM)
|
|
||||||
{
|
{
|
||||||
return unpack_lzma_stream(STDIN_FILENO, STDOUT_FILENO);
|
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;
|
option_mask32 |= OPT_STDOUT;
|
||||||
|
|
||||||
argv += optind;
|
argv += optind;
|
||||||
return bbunpack(argv, make_new_name_unlzma, unpack_unlzma);
|
return bbunpack(argv, unpack_unlzma, make_new_name_generic, "lzma");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if ENABLE_UNXZ
|
#if ENABLE_UNXZ
|
||||||
static
|
static
|
||||||
char* make_new_name_unxz(char *filename)
|
IF_DESKTOP(long long) int FAST_FUNC unpack_unxz(unpack_info_t *info UNUSED_PARAM)
|
||||||
{
|
|
||||||
return make_new_name_generic(filename, "xz");
|
|
||||||
}
|
|
||||||
static
|
|
||||||
IF_DESKTOP(long long) int unpack_unxz(unpack_info_t *info UNUSED_PARAM)
|
|
||||||
{
|
{
|
||||||
return unpack_xz_stream(STDIN_FILENO, STDOUT_FILENO);
|
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;
|
option_mask32 |= OPT_STDOUT;
|
||||||
|
|
||||||
argv += optind;
|
argv += optind;
|
||||||
return bbunpack(argv, make_new_name_unxz, unpack_unxz);
|
return bbunpack(argv, unpack_unxz, make_new_name_generic, "xz");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -102,7 +102,7 @@ IF_DESKTOP(long long) int bz_write(bz_stream *strm, void* rbuf, ssize_t rlen, vo
|
|||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
IF_DESKTOP(long long) int compressStream(unpack_info_t *info UNUSED_PARAM)
|
IF_DESKTOP(long long) int FAST_FUNC compressStream(unpack_info_t *info UNUSED_PARAM)
|
||||||
{
|
{
|
||||||
IF_DESKTOP(long long) int total;
|
IF_DESKTOP(long long) int total;
|
||||||
ssize_t count;
|
ssize_t count;
|
||||||
@ -135,12 +135,6 @@ IF_DESKTOP(long long) int compressStream(unpack_info_t *info UNUSED_PARAM)
|
|||||||
return total;
|
return total;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
|
||||||
char* make_new_name_bzip2(char *filename)
|
|
||||||
{
|
|
||||||
return xasprintf("%s.bz2", filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
int bzip2_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
int bzip2_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
||||||
int bzip2_main(int argc UNUSED_PARAM, char **argv)
|
int bzip2_main(int argc UNUSED_PARAM, char **argv)
|
||||||
{
|
{
|
||||||
@ -181,5 +175,5 @@ int bzip2_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
|
|
||||||
argv += optind;
|
argv += optind;
|
||||||
option_mask32 &= 0x7; /* ignore all except -cfv */
|
option_mask32 &= 0x7; /* ignore all except -cfv */
|
||||||
return bbunpack(argv, make_new_name_bzip2, compressStream);
|
return bbunpack(argv, compressStream, append_ext, "bz2");
|
||||||
}
|
}
|
||||||
|
@ -1998,13 +1998,7 @@ static void zip(ulg time_stamp)
|
|||||||
|
|
||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
static
|
static
|
||||||
char* make_new_name_gzip(char *filename)
|
IF_DESKTOP(long long) int FAST_FUNC pack_gzip(unpack_info_t *info UNUSED_PARAM)
|
||||||
{
|
|
||||||
return xasprintf("%s.gz", filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
IF_DESKTOP(long long) int pack_gzip(unpack_info_t *info UNUSED_PARAM)
|
|
||||||
{
|
{
|
||||||
struct stat s;
|
struct stat s;
|
||||||
|
|
||||||
@ -2063,7 +2057,7 @@ static const char gzip_longopts[] ALIGN1 =
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Linux kernel build uses gzip -d -n. We accept and ignore it.
|
* Linux kernel build uses gzip -d -n. We accept and ignore -n.
|
||||||
* Man page says:
|
* Man page says:
|
||||||
* -n --no-name
|
* -n --no-name
|
||||||
* gzip: do not save the original file name and time stamp.
|
* gzip: do not save the original file name and time stamp.
|
||||||
@ -2113,5 +2107,5 @@ int gzip_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
/* Initialise the CRC32 table */
|
/* Initialise the CRC32 table */
|
||||||
G1.crc_32_tab = crc32_filltable(NULL, 0);
|
G1.crc_32_tab = crc32_filltable(NULL, 0);
|
||||||
|
|
||||||
return bbunpack(argv, make_new_name_gzip, pack_gzip);
|
return bbunpack(argv, pack_gzip, append_ext, "gz");
|
||||||
}
|
}
|
||||||
|
@ -1042,7 +1042,7 @@ static smallint do_lzo_decompress(void)
|
|||||||
return lzo_decompress(&header);
|
return lzo_decompress(&header);
|
||||||
}
|
}
|
||||||
|
|
||||||
static char* make_new_name_lzop(char *filename)
|
static char* FAST_FUNC make_new_name_lzop(char *filename, const char *expected_ext UNUSED_PARAM)
|
||||||
{
|
{
|
||||||
if (option_mask32 & OPT_DECOMPRESS) {
|
if (option_mask32 & OPT_DECOMPRESS) {
|
||||||
char *extension = strrchr(filename, '.');
|
char *extension = strrchr(filename, '.');
|
||||||
@ -1054,7 +1054,7 @@ static char* make_new_name_lzop(char *filename)
|
|||||||
return xasprintf("%s.lzo", filename);
|
return xasprintf("%s.lzo", filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
static IF_DESKTOP(long long) int pack_lzop(unpack_info_t *info UNUSED_PARAM)
|
static IF_DESKTOP(long long) int FAST_FUNC pack_lzop(unpack_info_t *info UNUSED_PARAM)
|
||||||
{
|
{
|
||||||
if (option_mask32 & OPT_DECOMPRESS)
|
if (option_mask32 & OPT_DECOMPRESS)
|
||||||
return do_lzo_decompress();
|
return do_lzo_decompress();
|
||||||
@ -1074,5 +1074,5 @@ int lzop_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
option_mask32 |= OPT_DECOMPRESS;
|
option_mask32 |= OPT_DECOMPRESS;
|
||||||
|
|
||||||
G.lzo_crc32_table = crc32_filltable(NULL, 0);
|
G.lzo_crc32_table = crc32_filltable(NULL, 0);
|
||||||
return bbunpack(argv, make_new_name_lzop, pack_lzop);
|
return bbunpack(argv, pack_lzop, make_new_name_lzop, /*unused:*/ NULL);
|
||||||
}
|
}
|
||||||
|
@ -155,9 +155,12 @@ IF_DESKTOP(long long) int unpack_Z_stream(int src_fd, int dst_fd) FAST_FUNC;
|
|||||||
/* wrapper which checks first two bytes to be "BZ" */
|
/* wrapper which checks first two bytes to be "BZ" */
|
||||||
IF_DESKTOP(long long) int unpack_bz2_stream_prime(int src_fd, int dst_fd) FAST_FUNC;
|
IF_DESKTOP(long long) int unpack_bz2_stream_prime(int src_fd, int dst_fd) FAST_FUNC;
|
||||||
|
|
||||||
|
char* append_ext(char *filename, const char *expected_ext) FAST_FUNC;
|
||||||
int bbunpack(char **argv,
|
int bbunpack(char **argv,
|
||||||
char* (*make_new_name)(char *filename),
|
IF_DESKTOP(long long) int FAST_FUNC (*unpacker)(unpack_info_t *info),
|
||||||
IF_DESKTOP(long long) int (*unpacker)(unpack_info_t *info)) FAST_FUNC;
|
char* FAST_FUNC (*make_new_name)(char *filename, const char *expected_ext),
|
||||||
|
const char *expected_ext
|
||||||
|
) FAST_FUNC;
|
||||||
|
|
||||||
#if BB_MMU
|
#if BB_MMU
|
||||||
void open_transformer(int fd,
|
void open_transformer(int fd,
|
||||||
|
Loading…
Reference in New Issue
Block a user