libbb: commonalize a bit of little-endian CRC32 table generation code

function                                             old     new   delta
global_crc32_new_table_le                              -      11     +11
crc32_new_table_le                                     -       9      +9
inflate_unzip_internal                               560     556      -4
flash_eraseall_main                                  823     819      -4
unpack_xz_stream                                    2403    2394      -9
lzop_main                                            121     112      -9
gzip_main                                            187     178      -9
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 0/5 up/down: 20/-35)            Total: -15 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2018-02-01 10:56:19 +01:00
parent 06076494da
commit ddacb03e87
8 changed files with 18 additions and 6 deletions

View File

@ -2239,7 +2239,7 @@ int gzip_main(int argc UNUSED_PARAM, char **argv)
ALLOC(ush, G1.prev, 1L << BITS); ALLOC(ush, G1.prev, 1L << BITS);
/* Initialize the CRC32 table */ /* Initialize the CRC32 table */
global_crc32_table = crc32_filltable(NULL, 0); global_crc32_new_table_le();
argv += optind; argv += optind;
return bbunpack(argv, pack_gzip, append_ext, "gz"); return bbunpack(argv, pack_gzip, append_ext, "gz");

View File

@ -1000,7 +1000,7 @@ inflate_unzip_internal(STATE_PARAM transformer_state_t *xstate)
gunzip_bb = 0; gunzip_bb = 0;
/* Create the crc table */ /* Create the crc table */
gunzip_crc_table = crc32_filltable(NULL, 0); gunzip_crc_table = crc32_new_table_le();
gunzip_crc = ~0; gunzip_crc = ~0;
error_msg = "corrupted data"; error_msg = "corrupted data";

View File

@ -52,7 +52,7 @@ unpack_xz_stream(transformer_state_t *xstate)
IF_DESKTOP(long long) int total = 0; IF_DESKTOP(long long) int total = 0;
if (!global_crc32_table) if (!global_crc32_table)
global_crc32_table = crc32_filltable(NULL, /*endian:*/ 0); global_crc32_new_table_le();
memset(&iobuf, 0, sizeof(iobuf)); memset(&iobuf, 0, sizeof(iobuf));
membuf = xmalloc(2 * BUFSIZ); membuf = xmalloc(2 * BUFSIZ);

View File

@ -1148,6 +1148,6 @@ int lzop_main(int argc UNUSED_PARAM, char **argv)
if (ENABLE_UNLZOP && applet_name[4] == 'o') if (ENABLE_UNLZOP && applet_name[4] == 'o')
option_mask32 |= OPT_DECOMPRESS; option_mask32 |= OPT_DECOMPRESS;
global_crc32_table = crc32_filltable(NULL, 0); global_crc32_new_table_le();
return bbunpack(argv, pack_lzop, make_new_name_lzop, /*unused:*/ NULL); return bbunpack(argv, pack_lzop, make_new_name_lzop, /*unused:*/ NULL);
} }

View File

@ -1928,6 +1928,8 @@ typedef struct md5_ctx_t md5sha_ctx_t;
extern uint32_t *global_crc32_table; extern uint32_t *global_crc32_table;
uint32_t *crc32_filltable(uint32_t *tbl256, int endian) FAST_FUNC; uint32_t *crc32_filltable(uint32_t *tbl256, int endian) FAST_FUNC;
uint32_t *crc32_new_table_le(void) FAST_FUNC;
uint32_t *global_crc32_new_table_le(void) FAST_FUNC;
uint32_t crc32_block_endian1(uint32_t val, const void *buf, unsigned len, uint32_t *crc_table) FAST_FUNC; uint32_t crc32_block_endian1(uint32_t val, const void *buf, unsigned len, uint32_t *crc_table) FAST_FUNC;
uint32_t crc32_block_endian0(uint32_t val, const void *buf, unsigned len, uint32_t *crc_table) FAST_FUNC; uint32_t crc32_block_endian0(uint32_t val, const void *buf, unsigned len, uint32_t *crc_table) FAST_FUNC;

View File

@ -41,6 +41,16 @@ uint32_t* FAST_FUNC crc32_filltable(uint32_t *crc_table, int endian)
return crc_table - 256; return crc_table - 256;
} }
/* Common uses: */
uint32_t* FAST_FUNC crc32_new_table_le(void)
{
return crc32_filltable(NULL, 0);
}
uint32_t* FAST_FUNC global_crc32_new_table_le(void)
{
global_crc32_table = crc32_new_table_le();
return global_crc32_table;
}
uint32_t FAST_FUNC crc32_block_endian1(uint32_t val, const void *buf, unsigned len, uint32_t *crc_table) uint32_t FAST_FUNC crc32_block_endian1(uint32_t val, const void *buf, unsigned len, uint32_t *crc_table)
{ {

View File

@ -101,7 +101,7 @@ int flash_eraseall_main(int argc UNUSED_PARAM, char **argv)
if (flags & OPTION_J) { if (flags & OPTION_J) {
uint32_t *crc32_table; uint32_t *crc32_table;
crc32_table = crc32_filltable(NULL, 0); crc32_table = crc32_new_table_le();
cleanmarker.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); cleanmarker.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
cleanmarker.nodetype = cpu_to_je16(JFFS2_NODETYPE_CLEANMARKER); cleanmarker.nodetype = cpu_to_je16(JFFS2_NODETYPE_CLEANMARKER);

View File

@ -177,7 +177,7 @@ check_gpt_label(void)
init_unicode(); init_unicode();
if (!global_crc32_table) { if (!global_crc32_table) {
global_crc32_table = crc32_filltable(NULL, 0); global_crc32_new_table_le();
} }
crc = SWAP_LE32(gpt_hdr->hdr_crc32); crc = SWAP_LE32(gpt_hdr->hdr_crc32);