Add a separate internal function to initialize the CRC32
authorLasse Collin <lasse.collin@tukaani.org>
Sun, 8 Feb 2009 16:24:50 +0000 (18:24 +0200)
committerLasse Collin <lasse.collin@tukaani.org>
Sun, 8 Feb 2009 16:24:50 +0000 (18:24 +0200)
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.

src/liblzma/check/check.h
src/liblzma/check/crc32_small.c
src/liblzma/lz/lz_encoder.c

index 73c6391..1dfc4d7 100644 (file)
@@ -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];
index b10bbd3..8507436 100644 (file)
@@ -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;
 
index 22a37cd..0b4a293 100644 (file)
@@ -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.