]> wimlib.net Git - wimlib/blobdiff - src/lzx-compress.c
Workaround for FILE_SUPERSEDE being broken in Windows PE ramdisk
[wimlib] / src / lzx-compress.c
index a9745b62c8a74973114e1088a358468d1123d8cc..2cb35e3adf8eda6f77bb45392043f662c8d87096 100644 (file)
@@ -7,20 +7,18 @@
 /*
  * Copyright (C) 2012, 2013, 2014 Eric Biggers
  *
- * This file is part of wimlib, a library for working with WIM files.
+ * This file is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 3 of the License, or (at your option) any
+ * later version.
  *
- * wimlib is free software; you can redistribute it and/or modify it under the
- * terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 3 of the License, or (at your option)
- * any later version.
- *
- * wimlib 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 GNU General Public License for more
+ * This file 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 GNU Lesser General Public License for more
  * details.
  *
- * You should have received a copy of the GNU General Public License
- * along with wimlib; if not, see http://www.gnu.org/licenses/.
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this file; if not, see http://www.gnu.org/licenses/.
  */
 
 
@@ -904,8 +902,7 @@ lzx_get_matches_nocache_multiblock(struct lzx_compressor *c,
  * offset.
  */
 static inline unsigned
-lzx_get_matches(struct lzx_compressor *c,
-               const struct lz_match **matches_ret)
+lzx_get_matches(struct lzx_compressor *c, const struct lz_match **matches_ret)
 {
        return (*c->get_matches_func)(c, matches_ret);
 }
@@ -1207,7 +1204,7 @@ lzx_match_cost_raw(unsigned len, unsigned offset_slot,
        unsigned main_symbol;
 
        if (len - LZX_MIN_MATCH_LEN < LZX_NUM_PRIMARY_LENS) {
-               len_header = len - LZX_MIN_MATCH_LEN ;
+               len_header = len - LZX_MIN_MATCH_LEN;
                cost = 0;
        } else {
                len_header = LZX_NUM_PRIMARY_LENS;
@@ -1788,6 +1785,8 @@ lzx_choose_lazy_items_for_block(struct lzx_compressor *c,
                         * length 3 match.  Output the previous match if there
                         * is one; otherwise output a literal.  */
 
+               no_match_found:
+
                        if (prev_len) {
                                skip_len = prev_len - 2;
                                goto output_prev_match;
@@ -1825,11 +1824,8 @@ lzx_choose_lazy_items_for_block(struct lzx_compressor *c,
                if (unlikely(cur_len > block_end - (window_ptr - 1))) {
                        /* Nearing end of block.  */
                        cur_len = block_end - (window_ptr - 1);
-                       if (cur_len < 3) {
-                               lzx_declare_literal(c, *(window_ptr - 1), &next_chosen_item);
-                               prev_len = 0;
-                               continue;
-                       }
+                       if (cur_len < 3)
+                               goto no_match_found;
                }
 
                if (prev_len == 0 || cur_score > prev_score) {
@@ -1893,11 +1889,11 @@ static int
 lzx_choose_verbatim_or_aligned(const struct lzx_freqs * freqs,
                               const struct lzx_codes * codes)
 {
-       unsigned aligned_cost = 0;
-       unsigned verbatim_cost = 0;
+       u32 aligned_cost = 0;
+       u32 verbatim_cost = 0;
 
-       /* A verbatim block require 3 bits in each place that an aligned symbol
-        * was used.  */
+       /* A verbatim block requires 3 bits in each place that an aligned symbol
+        * would be used in an aligned offset block.  */
        for (unsigned i = 0; i < LZX_ALIGNEDCODE_NUM_SYMBOLS; i++) {
                verbatim_cost += 3 * freqs->aligned[i];
                aligned_cost += codes->lens.aligned[i] * freqs->aligned[i];