]> wimlib.net Git - wimlib/blobdiff - src/xpress-decompress.c
wimboot_set_pointer(): No unnecessary file open
[wimlib] / src / xpress-decompress.c
index 431563b6a2de4c4c0b46fc6a3bce1b2bceea4644..8d7741090dbae4519f9c97ccfb43c77836110b10 100644 (file)
@@ -69,9 +69,9 @@
 #  include "config.h"
 #endif
 
-#include "wimlib.h"
 #include "wimlib/decompressor_ops.h"
 #include "wimlib/decompress_common.h"
+#include "wimlib/error.h"
 #include "wimlib/xpress.h"
 
 /*
@@ -85,8 +85,8 @@
  * Returns the match length, or -1 if the data is invalid.
  */
 static int
-xpress_decode_match(unsigned sym, input_idx_t window_pos,
-                   input_idx_t window_len, u8 window[restrict],
+xpress_decode_match(unsigned sym, u32 window_pos,
+                   u32 window_len, u8 window[restrict],
                    struct input_bitstream * restrict istream)
 {
        unsigned len_hdr;
@@ -135,15 +135,13 @@ xpress_lz_decode(struct input_bitstream * restrict istream,
                 unsigned uncompressed_len,
                 const u16 decode_table[restrict])
 {
-       input_idx_t curpos;
+       u32 curpos;
        unsigned match_len;
 
        for (curpos = 0; curpos < uncompressed_len; curpos += match_len) {
                unsigned sym;
                int ret;
 
-               bitstream_ensure_bits(istream, 16);
-
                sym = read_huffsym(istream, decode_table,
                                   XPRESS_TABLEBITS, XPRESS_MAX_CODEWORD_LEN);
                if (sym < XPRESS_NUM_CHARS) {
@@ -201,6 +199,16 @@ xpress_decompress(const void *compressed_data, size_t compressed_size,
                                uncompressed_size, decode_table);
 }
 
+static int
+xpress_create_decompressor(size_t max_block_size, void **dec_ret)
+{
+       if (max_block_size > XPRESS_MAX_OFFSET + 1)
+               return WIMLIB_ERR_INVALID_PARAM;
+
+       return 0;
+}
+
 const struct decompressor_ops xpress_decompressor_ops = {
-       .decompress = xpress_decompress,
+       .create_decompressor = xpress_create_decompressor,
+       .decompress          = xpress_decompress,
 };