From ddacb03e875dd4c1a79421d030da9cdc4f081e6e Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 1 Feb 2018 10:56:19 +0100 Subject: 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 --- archival/gzip.c | 2 +- archival/libarchive/decompress_gunzip.c | 2 +- archival/libarchive/decompress_unxz.c | 2 +- archival/lzop.c | 2 +- include/libbb.h | 2 ++ libbb/crc32.c | 10 ++++++++++ miscutils/flash_eraseall.c | 2 +- util-linux/fdisk_gpt.c | 2 +- 8 files changed, 18 insertions(+), 6 deletions(-) diff --git a/archival/gzip.c b/archival/gzip.c index e3dd79291..c5a1fe9b4 100644 --- a/archival/gzip.c +++ b/archival/gzip.c @@ -2239,7 +2239,7 @@ int gzip_main(int argc UNUSED_PARAM, char **argv) ALLOC(ush, G1.prev, 1L << BITS); /* Initialize the CRC32 table */ - global_crc32_table = crc32_filltable(NULL, 0); + global_crc32_new_table_le(); argv += optind; return bbunpack(argv, pack_gzip, append_ext, "gz"); diff --git a/archival/libarchive/decompress_gunzip.c b/archival/libarchive/decompress_gunzip.c index c8245d736..edff7e0e5 100644 --- a/archival/libarchive/decompress_gunzip.c +++ b/archival/libarchive/decompress_gunzip.c @@ -1000,7 +1000,7 @@ inflate_unzip_internal(STATE_PARAM transformer_state_t *xstate) gunzip_bb = 0; /* Create the crc table */ - gunzip_crc_table = crc32_filltable(NULL, 0); + gunzip_crc_table = crc32_new_table_le(); gunzip_crc = ~0; error_msg = "corrupted data"; diff --git a/archival/libarchive/decompress_unxz.c b/archival/libarchive/decompress_unxz.c index 0be85500c..8ae7a275b 100644 --- a/archival/libarchive/decompress_unxz.c +++ b/archival/libarchive/decompress_unxz.c @@ -52,7 +52,7 @@ unpack_xz_stream(transformer_state_t *xstate) IF_DESKTOP(long long) int total = 0; if (!global_crc32_table) - global_crc32_table = crc32_filltable(NULL, /*endian:*/ 0); + global_crc32_new_table_le(); memset(&iobuf, 0, sizeof(iobuf)); membuf = xmalloc(2 * BUFSIZ); diff --git a/archival/lzop.c b/archival/lzop.c index ba27aeff0..fef8cdba3 100644 --- a/archival/lzop.c +++ b/archival/lzop.c @@ -1148,6 +1148,6 @@ int lzop_main(int argc UNUSED_PARAM, char **argv) if (ENABLE_UNLZOP && applet_name[4] == 'o') 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); } diff --git a/include/libbb.h b/include/libbb.h index a93864020..2bb364366 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -1928,6 +1928,8 @@ typedef struct md5_ctx_t md5sha_ctx_t; extern uint32_t *global_crc32_table; 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_endian0(uint32_t val, const void *buf, unsigned len, uint32_t *crc_table) FAST_FUNC; diff --git a/libbb/crc32.c b/libbb/crc32.c index b00b580d0..728bcb736 100644 --- a/libbb/crc32.c +++ b/libbb/crc32.c @@ -41,6 +41,16 @@ uint32_t* FAST_FUNC crc32_filltable(uint32_t *crc_table, int endian) 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) { diff --git a/miscutils/flash_eraseall.c b/miscutils/flash_eraseall.c index fab21291c..8e93060ca 100644 --- a/miscutils/flash_eraseall.c +++ b/miscutils/flash_eraseall.c @@ -101,7 +101,7 @@ int flash_eraseall_main(int argc UNUSED_PARAM, char **argv) if (flags & OPTION_J) { 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.nodetype = cpu_to_je16(JFFS2_NODETYPE_CLEANMARKER); diff --git a/util-linux/fdisk_gpt.c b/util-linux/fdisk_gpt.c index 45d2aa6e7..cdb90627d 100644 --- a/util-linux/fdisk_gpt.c +++ b/util-linux/fdisk_gpt.c @@ -177,7 +177,7 @@ check_gpt_label(void) init_unicode(); if (!global_crc32_table) { - global_crc32_table = crc32_filltable(NULL, 0); + global_crc32_new_table_le(); } crc = SWAP_LE32(gpt_hdr->hdr_crc32); -- cgit v1.2.3