X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fdecompress_common.c;h=a490882d8542cd230877f6405ff34988ba98b322;hb=b982f17d9d036b7a0cac445c62983a30a0d16eb2;hp=49cd5ba0f083afa64248246080830fd93dfbb589;hpb=226a6dfe2909e054568298196785c944a1b5c4fa;p=wimlib diff --git a/src/decompress_common.c b/src/decompress_common.c index 49cd5ba0..a490882d 100644 --- a/src/decompress_common.c +++ b/src/decompress_common.c @@ -98,9 +98,11 @@ * binary tree. * * @decode_table: - * The array in which to create the decoding table. - * This must be 16-byte aligned and must have a length of at least - * ((2**table_bits) + 2 * num_syms) entries. + * The array in which to create the decoding table. This must be + * 16-byte aligned and must have a length of at least + * ((2**table_bits) + 2 * num_syms) entries. This is permitted to + * alias @lens, since all information from @lens is consumed before +* anything is written to @decode_table. * * @num_syms: * The number of symbols in the alphabet; also, the length of the @@ -115,7 +117,9 @@ * An array of length @num_syms, indexable by symbol, that gives the * length of the codeword, in bits, for that symbol. The length can * be 0, which means that the symbol does not have a codeword - * assigned. + * assigned. This is permitted to alias @decode_table, since all + * information from @lens is consumed before anything is written to + * @decode_table. * * @max_codeword_len: * The longest codeword length allowed in the compression format. @@ -126,10 +130,10 @@ * code. */ int -make_huffman_decode_table(u16 decode_table[const restrict], +make_huffman_decode_table(u16 decode_table[const], const unsigned num_syms, const unsigned table_bits, - const u8 lens[const restrict], + const u8 lens[const], const unsigned max_codeword_len) { const unsigned table_num_entries = 1 << table_bits; @@ -277,7 +281,7 @@ make_huffman_decode_table(u16 decode_table[const restrict], aliased_word_t *p; unsigned n; - BUILD_BUG_ON(WORDSIZE != 4 && WORDSIZE != 8); + STATIC_ASSERT(WORDSIZE == 4 || WORDSIZE == 8); v = MAKE_DIRECT_ENTRY(sorted_syms[sym_idx], codeword_len); v |= v << 16;