diff options
author | Lasse Collin <lasse.collin@tukaani.org> | 2009-02-08 18:24:50 +0200 |
---|---|---|
committer | Lasse Collin <lasse.collin@tukaani.org> | 2009-02-08 18:24:50 +0200 |
commit | 0e27028d74c5c7a8e036ae2a9b8cecb0ac79d3a6 (patch) | |
tree | da1e0548876b37f0100390e36593097b6fc99c20 | |
parent | Make "xz --force" to write to terminal as the error (diff) | |
download | xz-0e27028d74c5c7a8e036ae2a9b8cecb0ac79d3a6.tar.xz |
Add a separate internal function to initialize the CRC32
table, which is used also by LZ encoder. This was needed
because calling lzma_crc32() and ignoring the result is
a no-op due to lzma_attr_pure.
-rw-r--r-- | src/liblzma/check/check.h | 1 | ||||
-rw-r--r-- | src/liblzma/check/crc32_small.c | 10 | ||||
-rw-r--r-- | src/liblzma/lz/lz_encoder.c | 4 |
3 files changed, 12 insertions, 3 deletions
diff --git a/src/liblzma/check/check.h b/src/liblzma/check/check.h index 73c6391d..1dfc4d73 100644 --- a/src/liblzma/check/check.h +++ b/src/liblzma/check/check.h @@ -61,6 +61,7 @@ typedef struct { /// the array two-dimensional. #ifdef HAVE_SMALL extern uint32_t lzma_crc32_table[1][256]; +extern void lzma_crc32_init(void); #else extern const uint32_t lzma_crc32_table[8][256]; extern const uint64_t lzma_crc64_table[4][256]; diff --git a/src/liblzma/check/crc32_small.c b/src/liblzma/check/crc32_small.c index b10bbd37..8507436b 100644 --- a/src/liblzma/check/crc32_small.c +++ b/src/liblzma/check/crc32_small.c @@ -38,10 +38,18 @@ crc32_init(void) } +extern void +lzma_crc32_init(void) +{ + mythread_once(crc32_init); + return; +} + + extern LZMA_API(uint32_t) lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc) { - mythread_once(crc32_init); + lzma_crc32_init(); crc = ~crc; diff --git a/src/liblzma/lz/lz_encoder.c b/src/liblzma/lz/lz_encoder.c index 22a37cd7..0b4a2931 100644 --- a/src/liblzma/lz/lz_encoder.c +++ b/src/liblzma/lz/lz_encoder.c @@ -20,6 +20,7 @@ #include "lz_encoder.h" #include "lz_encoder_hash.h" +#include "check.h" struct lzma_coder_s { @@ -488,8 +489,7 @@ lzma_lz_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, { #ifdef HAVE_SMALL // We need that the CRC32 table has been initialized. - // This is enough to do it. - lzma_crc32(NULL, 0, 0); + lzma_crc32_init(); #endif // Allocate and initialize the base data structure. |