X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fdecompress.c;h=e97aab5c5c2f72cbf407ccacc65f8a750fb62f01;hp=6d4b41e2285512d33ad21e8a360a0d61931ca198;hb=908adfc82c98c531ca847f183489ccf57e190e16;hpb=1ab60207e56968e480be6400c67844017598b7dd diff --git a/src/decompress.c b/src/decompress.c index 6d4b41e2..e97aab5c 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -38,7 +38,8 @@ * (2**table_bits) + 2 * num_syms to guarantee * that there is enough space. * - * @num_syms: Total number of symbols in the Huffman tree. + * @num_syms: Number of symbols in the alphabet, including symbols + * that do not appear in this particular input chunk. * * @table_bits: Any symbols with a code length of table_bits or less can * be decoded in one lookup of the table. 2**table_bits @@ -46,7 +47,7 @@ * any Huffman codes longer than @table_bits. * * @lens: An array of length @num_syms, indexable by symbol, that - * gives the length of the Huffman codeward for that + * gives the length of the Huffman codeword for that * symbol. Because the Huffman tree is in canonical form, * it can be reconstructed by only knowing the length of * the codeword for each symbol. It is assumed, but not @@ -163,17 +164,15 @@ int make_huffman_decode_table(u16 decode_table[], unsigned num_syms, break; unsigned num_entries = 1 << (table_bits - codeword_len); - if (num_entries >= - (sizeof(unsigned long) / sizeof(decode_table[0]))) - { - wimlib_assert2(decode_table_pos % 4 == 0); + const unsigned entries_per_long = sizeof(unsigned long) / + sizeof(decode_table[0]); + if (num_entries >= entries_per_long) { + wimlib_assert2(decode_table_pos % entries_per_long == 0); BUILD_BUG_ON(sizeof(unsigned long) != 4 && sizeof(unsigned long) != 8); unsigned long *p = (unsigned long *)&decode_table[decode_table_pos]; - unsigned long n = num_entries / - (sizeof(unsigned long) / - sizeof(decode_table[0])); + unsigned n = num_entries / entries_per_long; unsigned long v = sym; if (sizeof(unsigned long) >= 4) v |= v << 16;