X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Flzx-decompress.c;h=99502d47edf451a2a3c295593d484bbe61bb98c7;hb=52a908ca68284a4dfa89a884f547fd78d1543772;hp=935600d4fe4dedc06d85f3dab87f77895500dd8b;hpb=e8c3ca2d1d0cac3d64985b45a9f654d2029a7518;p=wimlib diff --git a/src/lzx-decompress.c b/src/lzx-decompress.c index 935600d4..99502d47 100644 --- a/src/lzx-decompress.c +++ b/src/lzx-decompress.c @@ -121,19 +121,22 @@ struct lzx_tables { u16 maintree_decode_table[(1 << LZX_MAINTREE_TABLEBITS) + - (LZX_MAINTREE_NUM_SYMBOLS * 2)]; + (LZX_MAINTREE_NUM_SYMBOLS * 2)] + _aligned_attribute(DECODE_TABLE_ALIGNMENT); u8 maintree_lens[LZX_MAINTREE_NUM_SYMBOLS]; u16 lentree_decode_table[(1 << LZX_LENTREE_TABLEBITS) + - (LZX_LENTREE_NUM_SYMBOLS * 2)]; + (LZX_LENTREE_NUM_SYMBOLS * 2)] + _aligned_attribute(DECODE_TABLE_ALIGNMENT); u8 lentree_lens[LZX_LENTREE_NUM_SYMBOLS]; u16 alignedtree_decode_table[(1 << LZX_ALIGNEDTREE_TABLEBITS) + - (LZX_ALIGNEDTREE_NUM_SYMBOLS * 2)]; + (LZX_ALIGNEDTREE_NUM_SYMBOLS * 2)] + _aligned_attribute(DECODE_TABLE_ALIGNMENT); u8 alignedtree_lens[LZX_ALIGNEDTREE_NUM_SYMBOLS]; -}; +} _aligned_attribute(DECODE_TABLE_ALIGNMENT); /* @@ -241,7 +244,7 @@ lzx_read_code_lens(struct input_bitstream *istream, u8 lens[], unsigned num_zeroes; unsigned code; unsigned num_same; - char value; + signed char value; ret = read_huffsym_using_pretree(istream, pretree_decode_table, pretree_lens, &tree_code); @@ -281,7 +284,7 @@ lzx_read_code_lens(struct input_bitstream *istream, u8 lens[], &code); if (ret != 0) return ret; - value = (char)*lens - (char)code; + value = (signed char)*lens - (signed char)code; if (value < 0) value += 17; while (num_same--) { @@ -291,7 +294,7 @@ lzx_read_code_lens(struct input_bitstream *istream, u8 lens[], } break; default: /* Difference from old length. */ - value = (char)*lens - (char)tree_code; + value = (signed char)*lens - (signed char)tree_code; if (value < 0) value += 17; *lens = value; @@ -333,7 +336,7 @@ lzx_read_block_header(struct input_bitstream *istream, ret = bitstream_ensure_bits(istream, 4); if (ret) { - ERROR("LZX input stream overrun"); + DEBUG("LZX input stream overrun"); return ret; } @@ -376,7 +379,7 @@ lzx_read_block_header(struct input_bitstream *istream, tables->alignedtree_lens, 8); if (ret) { - ERROR("lzx_decompress(): Failed to make the decode " + DEBUG("lzx_decompress(): Failed to make the decode " "table for the aligned offset tree"); return ret; } @@ -394,7 +397,7 @@ lzx_read_block_header(struct input_bitstream *istream, ret = lzx_read_code_lens(istream, tables->maintree_lens, LZX_NUM_CHARS); if (ret) { - ERROR("lzx_decompress(): Failed to read the code " + DEBUG("lzx_decompress(): Failed to read the code " "lengths for the first 256 elements of the " "main tree"); return ret; @@ -409,7 +412,7 @@ lzx_read_block_header(struct input_bitstream *istream, tables->maintree_lens + LZX_NUM_CHARS, LZX_MAINTREE_NUM_SYMBOLS - LZX_NUM_CHARS); if (ret) { - ERROR("lzx_decompress(): Failed to read the path " + DEBUG("lzx_decompress(): Failed to read the path " "lengths for the remaining elements of the main " "tree"); return ret; @@ -424,7 +427,7 @@ lzx_read_block_header(struct input_bitstream *istream, tables->maintree_lens, LZX_MAX_CODEWORD_LEN); if (ret) { - ERROR("lzx_decompress(): Failed to make the decode " + DEBUG("lzx_decompress(): Failed to make the decode " "table for the main tree"); return ret; } @@ -433,7 +436,7 @@ lzx_read_block_header(struct input_bitstream *istream, ret = lzx_read_code_lens(istream, tables->lentree_lens, LZX_LENTREE_NUM_SYMBOLS); if (ret) { - ERROR("lzx_decompress(): Failed to read the path " + DEBUG("lzx_decompress(): Failed to read the path " "lengths for the length tree"); return ret; } @@ -445,7 +448,7 @@ lzx_read_block_header(struct input_bitstream *istream, tables->lentree_lens, LZX_MAX_CODEWORD_LEN); if (ret) { - ERROR("lzx_decompress(): Failed to build the length " + DEBUG("lzx_decompress(): Failed to build the length " "Huffman tree"); return ret; } @@ -462,7 +465,7 @@ lzx_read_block_header(struct input_bitstream *istream, * the next 16 bits. */ if (istream->bitsleft == 0) { if (istream->data_bytes_left < 14) { - ERROR("lzx_decompress(): Insufficient length in " + DEBUG("lzx_decompress(): Insufficient length in " "uncompressed block"); return -1; } @@ -470,7 +473,7 @@ lzx_read_block_header(struct input_bitstream *istream, istream->data_bytes_left -= 2; } else { if (istream->data_bytes_left < 12) { - ERROR("lzx_decompress(): Insufficient length in " + DEBUG("lzx_decompress(): Insufficient length in " "uncompressed block"); return -1; } @@ -486,7 +489,7 @@ lzx_read_block_header(struct input_bitstream *istream, * be read in lzx_decompress(). */ break; default: - ERROR("lzx_decompress(): Found invalid block"); + DEBUG("lzx_decompress(): Found invalid block"); return -1; } *block_type_ret = block_type; @@ -656,13 +659,13 @@ lzx_decode_match(unsigned main_element, int block_type, match_src = match_dest - match_offset; if (match_len > bytes_remaining) { - ERROR("lzx_decode_match(): Match of length %u bytes overflows " + DEBUG("lzx_decode_match(): Match of length %u bytes overflows " "uncompressed block size", match_len); return -1; } if (match_src < window) { - ERROR("lzx_decode_match(): Match of length %u bytes references " + DEBUG("lzx_decode_match(): Match of length %u bytes references " "data before window (match_offset = %u, window_pos = %u)", match_len, match_offset, window_pos); return -1; @@ -798,7 +801,7 @@ lzx_decompress_block(int block_type, unsigned block_size, return 0; } -/* Documented in wimlib.h */ +/* API function documented in wimlib.h */ WIMLIBAPI int wimlib_lzx_decompress(const void *compressed_data, unsigned compressed_len, void *uncompressed_data, unsigned uncompressed_len) @@ -848,7 +851,7 @@ wimlib_lzx_decompress(const void *compressed_data, unsigned compressed_len, block_size, window_pos); if (block_size > uncompressed_len - window_pos) { - ERROR("lzx_decompress(): Expected a block size of at " + DEBUG("lzx_decompress(): Expected a block size of at " "most %u bytes (found %u bytes)", uncompressed_len - window_pos, block_size); return -1; @@ -876,7 +879,7 @@ wimlib_lzx_decompress(const void *compressed_data, unsigned compressed_len, case LZX_BLOCKTYPE_UNCOMPRESSED: LZX_DEBUG("LZX_BLOCKTYPE_UNCOMPRESSED"); if (istream.data_bytes_left < block_size) { - ERROR("Unexpected end of input when " + DEBUG("Unexpected end of input when " "reading %u bytes from LZX bitstream " "(only have %u bytes left)", block_size, istream.data_bytes_left);