]> wimlib.net Git - wimlib/blobdiff - src/decompress_common.c
ntfs-3g_apply.c: do not fix up security descriptors anymore
[wimlib] / src / decompress_common.c
index 4ab9ccbe1c34fdb0519fa7cb0fe72e8e22bfc7ec..c927502c34a732c3f8114d0b87bb6ffc704e7fe1 100644 (file)
@@ -3,11 +3,21 @@
  *
  * Code for decompression shared among multiple compression formats.
  *
- * Author:  Eric Biggers
- * Year:    2012 - 2014
+ * The following copying information applies to this specific source code file:
  *
- * The author dedicates this file to the public domain.
- * You can do whatever you want with this file.
+ * Written in 2012-2015 by Eric Biggers <ebiggers3@gmail.com>
+ *
+ * To the extent possible under law, the author(s) have dedicated all copyright
+ * and related and neighboring rights to this software to the public domain
+ * worldwide via the Creative Commons Zero 1.0 Universal Public Domain
+ * Dedication (the "CC0").
+ *
+ * This software is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the CC0 for more details.
+ *
+ * You should have received a copy of the CC0 along with this software; if not
+ * see <http://creativecommons.org/publicdomain/zero/1.0/>.
  */
 
 #ifdef HAVE_CONFIG_H
  *   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
  *     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.
  * 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;
@@ -150,14 +164,6 @@ make_huffman_decode_table(u16 decode_table[const restrict],
        const unsigned entries_per_xmm = sizeof(__m128i) / sizeof(decode_table[0]);
 #endif
 
-       /* Check parameters if assertions are enabled.  */
-       wimlib_assert2((uintptr_t)decode_table % DECODE_TABLE_ALIGNMENT == 0);
-       wimlib_assert2(num_syms <= DECODE_TABLE_MAX_SYMBOLS);
-       wimlib_assert2(table_bits <= DECODE_TABLE_MAX_TABLE_BITS);
-       wimlib_assert2(max_codeword_len <= DECODE_TABLE_MAX_CODEWORD_LEN);
-       for (unsigned sym = 0; sym < num_syms; sym++)
-               wimlib_assert2(lens[sym] <= max_codeword_len);
-
        /* Count how many symbols have each possible codeword length.
         * Note that a length of 0 indicates the corresponding symbol is not
         * used in the code and therefore does not have a codeword.  */
@@ -285,7 +291,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;
@@ -381,7 +387,7 @@ make_huffman_decode_table(u16 decode_table[const restrict],
                                 * of as simply the root of the tree.  The
                                 * representation of these internal nodes is
                                 * simply the index of the left child combined
-                                * with the special bits 0xC000 to distingush
+                                * with the special bits 0xC000 to distinguish
                                 * the entry from direct mapping and leaf node
                                 * entries.  */
                                do {