summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-02-01 10:56:19 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2018-02-01 10:56:19 +0100
commitddacb03e875dd4c1a79421d030da9cdc4f081e6e (patch)
tree5fef3dda6eb881153d8acef87a297fc75223398e
parent06076494da41755893a6e072bbd9889581a9e9d1 (diff)
downloadbusybox-w32-ddacb03e875dd4c1a79421d030da9cdc4f081e6e.tar.gz
busybox-w32-ddacb03e875dd4c1a79421d030da9cdc4f081e6e.tar.bz2
busybox-w32-ddacb03e875dd4c1a79421d030da9cdc4f081e6e.zip
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>
-rw-r--r--archival/gzip.c2
-rw-r--r--archival/libarchive/decompress_gunzip.c2
-rw-r--r--archival/libarchive/decompress_unxz.c2
-rw-r--r--archival/lzop.c2
-rw-r--r--include/libbb.h2
-rw-r--r--libbb/crc32.c10
-rw-r--r--miscutils/flash_eraseall.c2
-rw-r--r--util-linux/fdisk_gpt.c2
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)
2239 ALLOC(ush, G1.prev, 1L << BITS); 2239 ALLOC(ush, G1.prev, 1L << BITS);
2240 2240
2241 /* Initialize the CRC32 table */ 2241 /* Initialize the CRC32 table */
2242 global_crc32_table = crc32_filltable(NULL, 0); 2242 global_crc32_new_table_le();
2243 2243
2244 argv += optind; 2244 argv += optind;
2245 return bbunpack(argv, pack_gzip, append_ext, "gz"); 2245 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)
1000 gunzip_bb = 0; 1000 gunzip_bb = 0;
1001 1001
1002 /* Create the crc table */ 1002 /* Create the crc table */
1003 gunzip_crc_table = crc32_filltable(NULL, 0); 1003 gunzip_crc_table = crc32_new_table_le();
1004 gunzip_crc = ~0; 1004 gunzip_crc = ~0;
1005 1005
1006 error_msg = "corrupted data"; 1006 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)
52 IF_DESKTOP(long long) int total = 0; 52 IF_DESKTOP(long long) int total = 0;
53 53
54 if (!global_crc32_table) 54 if (!global_crc32_table)
55 global_crc32_table = crc32_filltable(NULL, /*endian:*/ 0); 55 global_crc32_new_table_le();
56 56
57 memset(&iobuf, 0, sizeof(iobuf)); 57 memset(&iobuf, 0, sizeof(iobuf));
58 membuf = xmalloc(2 * BUFSIZ); 58 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)
1148 if (ENABLE_UNLZOP && applet_name[4] == 'o') 1148 if (ENABLE_UNLZOP && applet_name[4] == 'o')
1149 option_mask32 |= OPT_DECOMPRESS; 1149 option_mask32 |= OPT_DECOMPRESS;
1150 1150
1151 global_crc32_table = crc32_filltable(NULL, 0); 1151 global_crc32_new_table_le();
1152 return bbunpack(argv, pack_lzop, make_new_name_lzop, /*unused:*/ NULL); 1152 return bbunpack(argv, pack_lzop, make_new_name_lzop, /*unused:*/ NULL);
1153} 1153}
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;
1928 1928
1929extern uint32_t *global_crc32_table; 1929extern uint32_t *global_crc32_table;
1930uint32_t *crc32_filltable(uint32_t *tbl256, int endian) FAST_FUNC; 1930uint32_t *crc32_filltable(uint32_t *tbl256, int endian) FAST_FUNC;
1931uint32_t *crc32_new_table_le(void) FAST_FUNC;
1932uint32_t *global_crc32_new_table_le(void) FAST_FUNC;
1931uint32_t crc32_block_endian1(uint32_t val, const void *buf, unsigned len, uint32_t *crc_table) FAST_FUNC; 1933uint32_t crc32_block_endian1(uint32_t val, const void *buf, unsigned len, uint32_t *crc_table) FAST_FUNC;
1932uint32_t crc32_block_endian0(uint32_t val, const void *buf, unsigned len, uint32_t *crc_table) FAST_FUNC; 1934uint32_t crc32_block_endian0(uint32_t val, const void *buf, unsigned len, uint32_t *crc_table) FAST_FUNC;
1933 1935
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)
41 41
42 return crc_table - 256; 42 return crc_table - 256;
43} 43}
44/* Common uses: */
45uint32_t* FAST_FUNC crc32_new_table_le(void)
46{
47 return crc32_filltable(NULL, 0);
48}
49uint32_t* FAST_FUNC global_crc32_new_table_le(void)
50{
51 global_crc32_table = crc32_new_table_le();
52 return global_crc32_table;
53}
44 54
45uint32_t FAST_FUNC crc32_block_endian1(uint32_t val, const void *buf, unsigned len, uint32_t *crc_table) 55uint32_t FAST_FUNC crc32_block_endian1(uint32_t val, const void *buf, unsigned len, uint32_t *crc_table)
46{ 56{
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)
101 if (flags & OPTION_J) { 101 if (flags & OPTION_J) {
102 uint32_t *crc32_table; 102 uint32_t *crc32_table;
103 103
104 crc32_table = crc32_filltable(NULL, 0); 104 crc32_table = crc32_new_table_le();
105 105
106 cleanmarker.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); 106 cleanmarker.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
107 cleanmarker.nodetype = cpu_to_je16(JFFS2_NODETYPE_CLEANMARKER); 107 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)
177 177
178 init_unicode(); 178 init_unicode();
179 if (!global_crc32_table) { 179 if (!global_crc32_table) {
180 global_crc32_table = crc32_filltable(NULL, 0); 180 global_crc32_new_table_le();
181 } 181 }
182 182
183 crc = SWAP_LE32(gpt_hdr->hdr_crc32); 183 crc = SWAP_LE32(gpt_hdr->hdr_crc32);