diff options
author | Denys Vlasenko | 2010-10-27 15:26:45 +0200 |
---|---|---|
committer | Denys Vlasenko | 2010-10-27 15:26:45 +0200 |
commit | 9ce642f9746dfc29d119d0680b769677e3ea6da6 (patch) | |
tree | f8d2bcd08c691979058b610b32573a742a3e3024 /archival/libunarchive/decompress_unxz.c | |
parent | dd88ba88f5082b1785539b1fb87af7320515b8c9 (diff) | |
download | busybox-9ce642f9746dfc29d119d0680b769677e3ea6da6.zip busybox-9ce642f9746dfc29d119d0680b769677e3ea6da6.tar.gz |
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/decompress_unxz.c')
-rw-r--r-- | archival/libunarchive/decompress_unxz.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/archival/libunarchive/decompress_unxz.c b/archival/libunarchive/decompress_unxz.c index faba9ca..ca42723 100644 --- a/archival/libunarchive/decompress_unxz.c +++ b/archival/libunarchive/decompress_unxz.c @@ -22,17 +22,9 @@ /* We use our own crc32 function */ #define XZ_INTERNAL_CRC32 0 -static uint32_t *crc32_table; static uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc) { - crc = ~crc; - - while (size != 0) { - crc = crc32_table[*buf++ ^ (crc & 0xFF)] ^ (crc >> 8); - --size; - } - - return ~crc; + return ~crc32_block_endian0(~crc, buf, size, global_crc32_table); } /* We use arch-optimized unaligned accessors */ @@ -53,8 +45,8 @@ unpack_xz_stream(int src_fd, int dst_fd) unsigned char *membuf; IF_DESKTOP(long long) int total = 0; - if (!crc32_table) - crc32_table = crc32_filltable(NULL, /*endian:*/ 0); + if (!global_crc32_table) + global_crc32_table = crc32_filltable(NULL, /*endian:*/ 0); memset(&iobuf, 0, sizeof(iobuf)); /* Preload XZ file signature */ |