X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fxpress-decompress.c;h=8d7741090dbae4519f9c97ccfb43c77836110b10;hb=9511c93d1844fca4704b39ae03749ede15915456;hp=431563b6a2de4c4c0b46fc6a3bce1b2bceea4644;hpb=543d8a6b89049aff65fa7eabf5f4b376a196c8d2;p=wimlib diff --git a/src/xpress-decompress.c b/src/xpress-decompress.c index 431563b6..8d774109 100644 --- a/src/xpress-decompress.c +++ b/src/xpress-decompress.c @@ -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, };