aboutsummaryrefslogtreecommitdiff
path: root/archival/libunarchive
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2010-10-27 15:26:45 +0200
committerDenys Vlasenko <dvlasenk@redhat.com>2010-10-27 15:26:45 +0200
commit9ce642f9746dfc29d119d0680b769677e3ea6da6 (patch)
treef8d2bcd08c691979058b610b32573a742a3e3024 /archival/libunarchive
parentdd88ba88f5082b1785539b1fb87af7320515b8c9 (diff)
downloadbusybox-w32-9ce642f9746dfc29d119d0680b769677e3ea6da6.tar.gz
busybox-w32-9ce642f9746dfc29d119d0680b769677e3ea6da6.tar.bz2
busybox-w32-9ce642f9746dfc29d119d0680b769677e3ea6da6.zip
libbb: introduce and use common crc32 routine
function old new delta crc32_block_endian1 - 37 +37 crc32_block_endian0 - 34 +34 global_crc32_table - 8 +8 file_read 82 87 +5 gzip_main 211 214 +3 xz_crc32 40 35 -5 crc32_table 8 - -8 calculate_gunzip_crc 54 34 -20 lzo_crc32 54 25 -29 cksum_main 298 211 -87 ------------------------------------------------------------------------------ (add/remove: 3/1 grow/shrink: 2/4 up/down: 87/-149) Total: -62 bytes Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'archival/libunarchive')
-rw-r--r--archival/libunarchive/decompress_unxz.c14
-rw-r--r--archival/libunarchive/decompress_unzip.c5
2 files changed, 4 insertions, 15 deletions
diff --git a/archival/libunarchive/decompress_unxz.c b/archival/libunarchive/decompress_unxz.c
index faba9ca82..ca427231e 100644
--- a/archival/libunarchive/decompress_unxz.c
+++ b/archival/libunarchive/decompress_unxz.c
@@ -22,17 +22,9 @@
22 22
23/* We use our own crc32 function */ 23/* We use our own crc32 function */
24#define XZ_INTERNAL_CRC32 0 24#define XZ_INTERNAL_CRC32 0
25static uint32_t *crc32_table;
26static uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc) 25static uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc)
27{ 26{
28 crc = ~crc; 27 return ~crc32_block_endian0(~crc, buf, size, global_crc32_table);
29
30 while (size != 0) {
31 crc = crc32_table[*buf++ ^ (crc & 0xFF)] ^ (crc >> 8);
32 --size;
33 }
34
35 return ~crc;
36} 28}
37 29
38/* We use arch-optimized unaligned accessors */ 30/* We use arch-optimized unaligned accessors */
@@ -53,8 +45,8 @@ unpack_xz_stream(int src_fd, int dst_fd)
53 unsigned char *membuf; 45 unsigned char *membuf;
54 IF_DESKTOP(long long) int total = 0; 46 IF_DESKTOP(long long) int total = 0;
55 47
56 if (!crc32_table) 48 if (!global_crc32_table)
57 crc32_table = crc32_filltable(NULL, /*endian:*/ 0); 49 global_crc32_table = crc32_filltable(NULL, /*endian:*/ 0);
58 50
59 memset(&iobuf, 0, sizeof(iobuf)); 51 memset(&iobuf, 0, sizeof(iobuf));
60 /* Preload XZ file signature */ 52 /* Preload XZ file signature */
diff --git a/archival/libunarchive/decompress_unzip.c b/archival/libunarchive/decompress_unzip.c
index 20fda9d26..cb8a3d737 100644
--- a/archival/libunarchive/decompress_unzip.c
+++ b/archival/libunarchive/decompress_unzip.c
@@ -925,10 +925,7 @@ static int inflate_block(STATE_PARAM smallint *e)
925/* Two callsites, both in inflate_get_next_window */ 925/* Two callsites, both in inflate_get_next_window */
926static void calculate_gunzip_crc(STATE_PARAM_ONLY) 926static void calculate_gunzip_crc(STATE_PARAM_ONLY)
927{ 927{
928 unsigned n; 928 gunzip_crc = crc32_block_endian0(gunzip_crc, gunzip_window, gunzip_outbuf_count, gunzip_crc_table);
929 for (n = 0; n < gunzip_outbuf_count; n++) {
930 gunzip_crc = gunzip_crc_table[((int) gunzip_crc ^ (gunzip_window[n])) & 0xff] ^ (gunzip_crc >> 8);
931 }
932 gunzip_bytes_out += gunzip_outbuf_count; 929 gunzip_bytes_out += gunzip_outbuf_count;
933} 930}
934 931