# 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"
/*
* 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;
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) {
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,
};