]> wimlib.net Git - wimlib/blobdiff - src/lzx-compress.c
lzx-compress.c: Simplify output of length footer
[wimlib] / src / lzx-compress.c
index e1b65c7c18573bb721bd71ed6ab457a0892ca911..5246e1a1ed3b7add7f7c543c0a240177c3c1218e 100644 (file)
@@ -456,9 +456,6 @@ lzx_write_match(struct output_bitstream *out, int block_type,
         * MIN_MATCH_LEN. */
        if (match_len_minus_2 < LZX_NUM_PRIMARY_LENS) {
                len_header = match_len_minus_2;
-               /* No length footer-- mark it with a special
-                * value. */
-               len_footer = (unsigned)(-1);
        } else {
                len_header = LZX_NUM_PRIMARY_LENS;
                len_footer = match_len_minus_2 - LZX_NUM_PRIMARY_LENS;
@@ -478,10 +475,9 @@ lzx_write_match(struct output_bitstream *out, int block_type,
 
        /* If there is a length footer, output it using the
         * length Huffman code. */
-       if (len_footer != (unsigned)(-1)) {
+       if (len_header == LZX_NUM_PRIMARY_LENS)
                bitstream_put_bits(out, codes->codewords.len[len_footer],
                                   codes->lens.len[len_footer]);
-       }
 
        num_extra_bits = lzx_get_num_extra_bits(position_slot);
 
@@ -962,8 +958,8 @@ lzx_tally_match(unsigned match_len, unsigned match_offset,
        /* The match offset shall be encoded as a position slot (itself encoded
         * as part of the main symbol) and a position footer.  */
        position_slot = lzx_get_position_slot(match_offset, queue);
-       position_footer = (match_offset + LZX_OFFSET_OFFSET) &
-                               ((1U << lzx_get_num_extra_bits(position_slot)) - 1);
+       position_footer = (match_offset + LZX_OFFSET_OFFSET) -
+                               lzx_position_base[position_slot];
 
        /* The match length shall be encoded as a length header (itself encoded
         * as part of the main symbol) and an optional length footer.  */