u8 len_hdr;
u8 offset_bsr;
- int ret;
u8 *match_dest;
u8 *match_src;
unsigned i;
len_hdr = sym & 0xf;
offset_bsr = sym >> 4;
- if (bitstream_ensure_bits(istream, 16))
- return -1;
+ bitstream_ensure_bits(istream, 16);
match_offset = (1U << offset_bsr) | bitstream_pop_bits(istream, offset_bsr);
if (len_hdr == 0xf) {
- ret = bitstream_read_byte(istream);
- if (ret < 0)
- return ret;
- match_len = ret;
+ match_len = bitstream_read_byte(istream);
if (unlikely(match_len == 0xff)) {
- ret = bitstream_read_byte(istream);
- if (ret < 0)
- return ret;
- match_len = ret;
-
- ret = bitstream_read_byte(istream);
- if (ret < 0)
- return ret;
-
- match_len |= (ret << 8);
+ match_len = bitstream_read_byte(istream);
+ match_len |= (unsigned)bitstream_read_byte(istream) << 8;
} else {
match_len += 0xf;
}
match_len += XPRESS_MIN_MATCH_LEN;
- /* Verify the match is in bounds, then copy its data to the the current
+ /* Verify the match is in bounds, then copy its data to the current
* position. */
if (window_pos + match_len > window_len)
unsigned sym;
int ret;
- if (unlikely(bitstream_ensure_bits(istream, 16)))
- return -1;
-
- if (unlikely(read_huffsym(istream, decode_table, lens,
- XPRESS_NUM_SYMBOLS, XPRESS_TABLEBITS,
- &sym, XPRESS_MAX_CODEWORD_LEN)))
- return -1;
+ bitstream_ensure_bits(istream, 16);
+ sym = read_huffsym(istream, decode_table,
+ XPRESS_TABLEBITS, XPRESS_MAX_CODEWORD_LEN);
if (sym < XPRESS_NUM_CHARS) {
/* Literal */
uncompressed_data[curpos] = sym;
}
-/* API function documented in wimlib.h */
static int
xpress_decompress(const void *compressed_data, size_t compressed_size,
void *uncompressed_data, size_t uncompressed_size, void *_ctx)