X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fdecompress.c;h=5de137956286fbd5730eaaa0a4b41f3203a98cab;hb=0ea2bc5fcf915a313935c00a76d64aa60b5ae3c9;hp=5c308b2d7bd2cdfba9425fc41c8cdf7abed11219;hpb=1530b6dab02a9e1e5faf81529ab502aee68d8cd2;p=wimlib diff --git a/src/decompress.c b/src/decompress.c index 5c308b2d..5de13795 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -5,7 +5,7 @@ */ /* - * Copyright (C) 2012 Eric Biggers + * Copyright (C) 2012, 2013 Eric Biggers * * This file is part of wimlib, a library for working with WIM files. * @@ -167,6 +167,10 @@ int make_huffman_decode_table(u16 decode_table[], unsigned num_syms, const unsigned entries_per_long = sizeof(unsigned long) / sizeof(decode_table[0]); if (num_entries >= entries_per_long) { + /* Fill in the Huffman decode table entries one unsigned + * long at a time. On 32-bit systems this is 2 entries + * per store, while on 64-bit systems this is 4 entries + * per store. */ wimlib_assert2(decode_table_pos % entries_per_long == 0); BUILD_BUG_ON(sizeof(unsigned long) != 4 && sizeof(unsigned long) != 8); @@ -176,14 +180,21 @@ int make_huffman_decode_table(u16 decode_table[], unsigned num_syms, unsigned long v = sym; if (sizeof(unsigned long) >= 4) v |= v << 16; - if (sizeof(unsigned long) >= 8) + if (sizeof(unsigned long) >= 8) { + /* This may produce a compiler warning if an + * unsigned long is 32 bits, but this won't be + * executed unless an unsigned long is at least + * 64 bits anyway. */ v |= v << 32; + } do { *p++ = v; } while (--n); decode_table_pos += num_entries; } else { + /* Fill in the Huffman decode table entries one 16-bit + * integer at a time. */ do { decode_table[decode_table_pos++] = sym; } while (--num_entries); @@ -234,7 +245,6 @@ int make_huffman_decode_table(u16 decode_table[], unsigned num_syms, unsigned sym = sorted_syms[i]; unsigned codeword_len = lens[sym]; unsigned extra_bits = codeword_len - table_bits; - unsigned extra_mask; cur_codeword <<= (codeword_len - prev_codeword_len); prev_codeword_len = codeword_len;