#include "common.h"
Functions | |
LZMA_API (lzma_ret) | |
Calculate Block Header Size. |
LZMA_API | ( | lzma_ret | ) |
Calculate Block Header Size.
Single-call .xz Block decoder.
Single-call .xz Block encoder.
Initialize .xz Block decoder.
Initialize .xz Block encoder.
Validate and set Compressed Size according to Unpadded Size.
Decode Block Header.
Encode Block Header.
Calculate the minimum size needed for the Block Header field using the settings specified in the lzma_block structure. Note that it is OK to increase the calculated header_size value as long as it is a multiple of four and doesn't exceed LZMA_BLOCK_HEADER_SIZE_MAX. Increasing header_size just means that lzma_block_header_encode() will add Header Padding.
out | Beginning of the output buffer. This must be at least block->header_size bytes. | |
block | Block options to be encoded. |
block | Destination for block options with header_size properly initialized. | |
allocator | lzma_allocator for custom allocator functions. Set to NULL to use malloc() (and also free() if an error occurs). | |
in | Beginning of the input buffer. This must be at least block->header_size bytes. |
When the data isn't compressible, header_size, compressed_size, and uncompressed_size are set just like when the data was compressible, but it is possible that header_size is too small to hold the filter chain specified in block->filters, because that isn't necessarily the filter chain that was actually used to encode the data. lzma_block_unpadded_size() still works normally, because it doesn't read the filters array.
block | Block options: block->version, block->check, and block->filters must be initialized. | |
allocator | lzma_allocator for custom allocator functions. Set to NULL to use malloc() and free(). | |
in | Beginning of the input buffer | |
in_size | Size of the input buffer | |
out | Beginning of the output buffer | |
out_pos | The next byte will be written to out[*out_pos]. *out_pos is updated only if encoding succeeds. | |
out_size | Size of the out buffer; the first byte into which no data is written to is out[out_size]. |
block | Block options just like with lzma_block_decoder(). | |
allocator | lzma_allocator for custom allocator functions. Set to NULL to use malloc() and free(). | |
in | Beginning of the input buffer | |
in_pos | The next byte will be read from in[*in_pos]. *in_pos is updated only if decoding succeeds. | |
in_size | Size of the input buffer; the first byte that won't be read is in[in_size]. | |
out | Beginning of the output buffer | |
out_pos | The next byte will be written to out[*out_pos]. *out_pos is updated only if encoding succeeds. | |
out_size | Size of the out buffer; the first byte into which no data is written to is out[out_size]. |
Decodes variable-length integer.
Compare two lzma_stream_flags structures.
Decode Stream Footer.
Decode Stream Header.
Encode Stream Footer.
Decode and validate the Index field.
Single-call Index decoder.
Single-call Index encoder.
Initialize Index decoder.
Initialize Index encoder.
Concatenate Indexes of two Streams.
Decode Filter Flags from given buffer.
Encode Filter Flags into given buffer.
Calculate encoded size of a Filter Flags field.
Decode the Filter Properties field.
Encode the Filter Properties field.
Get the size of the Filter Properties field.
Single-call raw decoder.
Single-call raw encoder.
Initialize raw decoder.
Single-call .xz Stream decoder.
Initialize .lzma decoder (legacy file format).
Decode .xz Streams and .lzma files with autodetection.
Initialize .xz Stream decoder.
Single-call Stream encoder.
Initialize .lzma encoder (legacy file format).
Initialize .xz Stream encoder using a custom filter chain.
Single-call .xz Block decoder.
Single-call .xz Block encoder.
Initialize .xz Block decoder.
Initialize .xz Block encoder.
Validate and set Compressed Size according to Unpadded Size.
Decode Block Header.
Encode Block Header.
Set the memory usage limit.
Once the lzma_stream has been successfully initialized (e.g. with lzma_stream_encoder()), the actual encoding or decoding is done using this function. The application has to update strm->next_in, strm->avail_in, strm->next_out, and strm->avail_out to pass input to and get output from liblzma.
See the description of the coder-specific initialization function to find out what `action' values are supported by the coder. See documentation of lzma_ret for the possible return values.
This function is supported only when *strm has been initialized with a function that takes a memlimit argument.
out | Beginning of the output buffer. This must be at least block->header_size bytes. | |
block | Block options to be encoded. |
block | Destination for block options with header_size properly initialized. | |
allocator | lzma_allocator for custom allocator functions. Set to NULL to use malloc() (and also free() if an error occurs). | |
in | Beginning of the input buffer. This must be at least block->header_size bytes. |
When the data isn't compressible, header_size, compressed_size, and uncompressed_size are set just like when the data was compressible, but it is possible that header_size is too small to hold the filter chain specified in block->filters, because that isn't necessarily the filter chain that was actually used to encode the data. lzma_block_unpadded_size() still works normally, because it doesn't read the filters array.
block | Block options: block->version, block->check, and block->filters must be initialized. | |
allocator | lzma_allocator for custom allocator functions. Set to NULL to use malloc() and free(). | |
in | Beginning of the input buffer | |
in_size | Size of the input buffer | |
out | Beginning of the output buffer | |
out_pos | The next byte will be written to out[*out_pos]. *out_pos is updated only if encoding succeeds. | |
out_size | Size of the out buffer; the first byte into which no data is written to is out[out_size]. |
block | Block options just like with lzma_block_decoder(). | |
allocator | lzma_allocator for custom allocator functions. Set to NULL to use malloc() and free(). | |
in | Beginning of the input buffer | |
in_pos | The next byte will be read from in[*in_pos]. *in_pos is updated only if decoding succeeds. | |
in_size | Size of the input buffer; the first byte that won't be read is in[in_size]. | |
out | Beginning of the output buffer | |
out_pos | The next byte will be written to out[*out_pos]. *out_pos is updated only if encoding succeeds. | |
out_size | Size of the out buffer; the first byte into which no data is written to is out[out_size]. |
strm | Pointer to properly prepared lzma_stream | |
filters | Array of filters. This must be terminated with filters[n].id = LZMA_VLI_UNKNOWN. See filter.h for more information. | |
check | Type of the integrity check to calculate from uncompressed data. |
Use this function if and only if you need to create files readable by legacy LZMA tools such as LZMA Utils 4.32.x. Moving to the .xz format is strongly recommended.
The valid action values for lzma_code() are LZMA_RUN and LZMA_FINISH. No kind of flushing is supported, because the file format doesn't make it possible.
filters | Array of filters. This must be terminated with filters[n].id = LZMA_VLI_UNKNOWN. See filter.h for more information. | |
check | Type of the integrity check to calculate from uncompressed data. | |
allocator | lzma_allocator for custom allocator functions. Set to NULL to use malloc() and free(). | |
in | Beginning of the input buffer | |
in_size | Size of the input buffer | |
out | Beginning of the output buffer | |
out_pos | The next byte will be written to out[*out_pos]. *out_pos is updated only if encoding succeeds. | |
out_size | Size of the out buffer; the first byte into which no data is written to is out[out_size]. |
strm | Pointer to properly prepared lzma_stream | |
memlimit | Rough memory usage limit as bytes | |
flags | Bitwise-or of zero or more of the decoder flags: LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK, LZMA_TELL_ANY_CHECK, LZMA_CONCATENATED |
strm | Pointer to properly prepared lzma_stream | |
memlimit | Rough memory usage limit as bytes | |
flags | Bitwise-or of flags, or zero for no flags. |
memlimit | Pointer to how much memory the decoder is allowed to allocate. The value pointed by this pointer is modified if and only if LZMA_MEMLIMIT_ERROR is returned. | |
flags | Bitwise-or of zero or more of the decoder flags: LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK, LZMA_CONCATENATED. Note that LZMA_TELL_ANY_CHECK is not allowed and will return LZMA_PROG_ERROR. | |
allocator | lzma_allocator for custom allocator functions. Set to NULL to use malloc() and free(). | |
in | Beginning of the input buffer | |
in_pos | The next byte will be read from in[*in_pos]. *in_pos is updated only if decoding succeeds. | |
in_size | Size of the input buffer; the first byte that won't be read is in[in_size]. | |
out | Beginning of the output buffer | |
out_pos | The next byte will be written to out[*out_pos]. *out_pos is updated only if encoding succeeds. | |
out_size | Size of the out buffer; the first byte into which no data is written to is out[out_size]. |
The `action' with lzma_code() can be LZMA_RUN or LZMA_FINISH. Using LZMA_FINISH is not required, it is supported just for convenience.
allocator | lzma_allocator for custom allocator functions. Set to NULL to use malloc() and free(). | |
in | Beginning of the input buffer | |
in_size | Size of the input buffer | |
out | Beginning of the output buffer | |
out_pos | The next byte will be written to out[*out_pos]. *out_pos is updated only if encoding succeeds. | |
out_size | Size of the out buffer; the first byte into which no data is written to is out[out_size]. |
allocator | lzma_allocator for custom allocator functions. Set to NULL to use malloc() and free(). | |
in | Beginning of the input buffer | |
in_pos | The next byte will be read from in[*in_pos]. *in_pos is updated only if decoding succeeds. | |
in_size | Size of the input buffer; the first byte that won't be read is in[in_size]. | |
out | Beginning of the output buffer | |
out_pos | The next byte will be written to out[*out_pos]. *out_pos is updated only if encoding succeeds. | |
out_size | Size of the out buffer; the first byte into which no data is written to is out[out_size]. |
size | Pointer to uint32_t to hold the size of the properties | |
filter | Filter ID and options (the size of the propeties may vary depending on the options) |
filter | Filter ID and options | |
props | Buffer to hold the encoded options. The size of buffer must have been already determined with lzma_properties_size(). |
It is OK to skip calling this function if lzma_properties_size() indicated that the size of the Filter Properties field is zero.
filter | filter->id must have been set to the correct Filter ID. filter->options doesn't need to be initialized (it's not freed by this function). The decoded options will be stored to filter->options. filter->options is set to NULL if there are no properties or if an error occurs. | |
allocator | Custom memory allocator used to allocate the options. Set to NULL to use the default malloc(), and in case of an error, also free(). | |
props | Input buffer containing the properties. | |
props_size | Size of the properties. This must be the exact size; giving too much or too little input will return LZMA_OPTIONS_ERROR. |
size | Pointer to integer to hold the calculated size | |
filters | Filter ID and associated options whose encoded size is to be calculted |
filters | Filter ID and options to be encoded | |
out | Beginning of the output buffer | |
out_pos | out[*out_pos] is the next write position. This is updated by the encoder. | |
out_size | out[out_size] is the first byte to not write. |
dest | Destination Index after which src is appended | |
src | Source Index. The memory allocated for this is either moved to be part of *dest or freed if and only if the function call succeeds, and src will be an invalid pointer. | |
allocator | Custom memory allocator; can be NULL to use malloc() and free(). | |
padding | Size of the Stream Padding field between Streams. This must be a multiple of four. |
strm | Pointer to properly prepared lzma_stream | |
i | Pointer to lzma_index which should be encoded. The read position will be at the end of the Index after lzma_code() has returned LZMA_STREAM_END. |
strm | Pointer to properly prepared lzma_stream | |
i | Pointer to a pointer that will be made to point to the final decoded Index once lzma_code() has returned LZMA_STREAM_END. That is, lzma_index_decoder() always takes care of allocating a new lzma_index structure, and *i doesn't need to be initialized by the caller. | |
memlimit | How much memory the resulting Index is allowed to require. |
i | Index to be encoded. The read position will be at the end of the Index if encoding succeeds, or at unspecified position in case an error occurs. | |
out | Beginning of the output buffer | |
out_pos | The next byte will be written to out[*out_pos]. *out_pos is updated only if encoding succeeds. | |
out_size | Size of the out buffer; the first byte into which no data is written to is out[out_size]. |
i | Pointer to a pointer that will be made to point to the final decoded Index if decoding is successful. That is, lzma_index_buffer_decode() always takes care of allocating a new lzma_index structure, and *i doesn't need to be initialized by the caller. | |
memlimit | Pointer to how much memory the resulting Index is allowed to require. The value pointed by this pointer is modified if and only if LZMA_MEMLIMIT_ERROR is returned. | |
allocator | Pointer to lzma_allocator, or NULL to use malloc() | |
in | Beginning of the input buffer | |
in_pos | The next byte will be read from in[*in_pos]. *in_pos is updated only if decoding succeeds. | |
in_size | Size of the input buffer; the first byte that won't be read is in[in_size]. |
This function doesn't use lzma_stream structure to pass the input data. Instead, the input buffer is specified using three arguments. This is because it matches better the internal APIs of liblzma.
index_hash | Pointer to a lzma_index_hash structure | |
in | Pointer to the beginning of the input buffer | |
in_pos | in[*in_pos] is the next byte to process | |
in_size | in[in_size] is the first byte not to process |
options | Stream Footer options to be encoded. | |
out | Beginning of the output buffer of LZMA_STREAM_HEADER_SIZE bytes. |
options | Stream Header options to be encoded. | |
in | Beginning of the input buffer of LZMA_STREAM_HEADER_SIZE bytes. |
options | Stream Header options to be encoded. | |
in | Beginning of the input buffer of LZMA_STREAM_HEADER_SIZE bytes. |
vli | Pointer to decoded integer. The decoder will initialize it to zero when *vli_pos == 0, so application isn't required to initialize *vli. | |
vli_pos | How many bytes have already been decoded. When starting to decode a new integer, *vli_pos must be initialized to zero. To use single-call decoding, set this to NULL. | |
in | Beginning of the input buffer | |
in_pos | The next byte will be read from in[*in_pos]. | |
in_size | Size of the input buffer; the first byte that won't be read is in[in_size]. |
Multi-call (vli_pos != NULL):
Calculate Block Header Size.
Single-call .xz Stream decoder.
Initialize .lzma decoder (legacy file format).
Decode .xz Streams and .lzma files with autodetection.
Initialize .xz Stream decoder.
Single-call Stream encoder.
Initialize .lzma encoder (legacy file format).
Initialize .xz Stream encoder using a custom filter chain.
This function is intended for those who just want to use the basic features if liblzma (that is, most developers out there).
strm | Pointer to lzma_stream that is at least initialized with LZMA_STREAM_INIT. | |
preset | Compression preset to use. A preset consist of level number and zero or more flags. Usually flags aren't used, so preset is simply a number [0, 9] which match the options -0 .. -9 of the xz command line tool. Additional flags can be be set using bitwise-or with the preset level number, e.g. 6 | LZMA_PRESET_EXTREME. | |
check | Integrity check type to use. See check.h for available checks. If you are unsure, use LZMA_CHECK_CRC32. |
strm | Pointer to properly prepared lzma_stream | |
filters | Array of filters. This must be terminated with filters[n].id = LZMA_VLI_UNKNOWN. See filter.h for more information. | |
check | Type of the integrity check to calculate from uncompressed data. |
Use this function if and only if you need to create files readable by legacy LZMA tools such as LZMA Utils 4.32.x. Moving to the .xz format is strongly recommended.
The valid action values for lzma_code() are LZMA_RUN and LZMA_FINISH. No kind of flushing is supported, because the file format doesn't make it possible.
filters | Array of filters. This must be terminated with filters[n].id = LZMA_VLI_UNKNOWN. See filter.h for more information. | |
check | Type of the integrity check to calculate from uncompressed data. | |
allocator | lzma_allocator for custom allocator functions. Set to NULL to use malloc() and free(). | |
in | Beginning of the input buffer | |
in_size | Size of the input buffer | |
out | Beginning of the output buffer | |
out_pos | The next byte will be written to out[*out_pos]. *out_pos is updated only if encoding succeeds. | |
out_size | Size of the out buffer; the first byte into which no data is written to is out[out_size]. |
strm | Pointer to properly prepared lzma_stream | |
memlimit | Rough memory usage limit as bytes | |
flags | Bitwise-or of zero or more of the decoder flags: LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK, LZMA_TELL_ANY_CHECK, LZMA_CONCATENATED |
strm | Pointer to properly prepared lzma_stream | |
memlimit | Rough memory usage limit as bytes | |
flags | Bitwise-or of flags, or zero for no flags. |
memlimit | Pointer to how much memory the decoder is allowed to allocate. The value pointed by this pointer is modified if and only if LZMA_MEMLIMIT_ERROR is returned. | |
flags | Bitwise-or of zero or more of the decoder flags: LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK, LZMA_CONCATENATED. Note that LZMA_TELL_ANY_CHECK is not allowed and will return LZMA_PROG_ERROR. | |
allocator | lzma_allocator for custom allocator functions. Set to NULL to use malloc() and free(). | |
in | Beginning of the input buffer | |
in_pos | The next byte will be read from in[*in_pos]. *in_pos is updated only if decoding succeeds. | |
in_size | Size of the input buffer; the first byte that won't be read is in[in_size]. | |
out | Beginning of the output buffer | |
out_pos | The next byte will be written to out[*out_pos]. *out_pos is updated only if encoding succeeds. | |
out_size | Size of the out buffer; the first byte into which no data is written to is out[out_size]. |
Decode Filter Flags from given buffer.
Encode Filter Flags into given buffer.
Calculate encoded size of a Filter Flags field.
Decode the Filter Properties field.
Encode the Filter Properties field.
Get the size of the Filter Properties field.
Single-call raw decoder.
Single-call raw encoder.
Initialize raw decoder.
This function may be useful when implementing custom file formats.
strm | Pointer to properly prepared lzma_stream | |
filters | Array of lzma_filter structures. The end of the array must be marked with .id = LZMA_VLI_UNKNOWN. The minimum number of filters is one and the maximum is four. |
The `action' with lzma_code() can be LZMA_RUN or LZMA_FINISH. Using LZMA_FINISH is not required, it is supported just for convenience.
allocator | lzma_allocator for custom allocator functions. Set to NULL to use malloc() and free(). | |
in | Beginning of the input buffer | |
in_size | Size of the input buffer | |
out | Beginning of the output buffer | |
out_pos | The next byte will be written to out[*out_pos]. *out_pos is updated only if encoding succeeds. | |
out_size | Size of the out buffer; the first byte into which no data is written to is out[out_size]. |
allocator | lzma_allocator for custom allocator functions. Set to NULL to use malloc() and free(). | |
in | Beginning of the input buffer | |
in_pos | The next byte will be read from in[*in_pos]. *in_pos is updated only if decoding succeeds. | |
in_size | Size of the input buffer; the first byte that won't be read is in[in_size]. | |
out | Beginning of the output buffer | |
out_pos | The next byte will be written to out[*out_pos]. *out_pos is updated only if encoding succeeds. | |
out_size | Size of the out buffer; the first byte into which no data is written to is out[out_size]. |
size | Pointer to uint32_t to hold the size of the properties | |
filter | Filter ID and options (the size of the propeties may vary depending on the options) |
filter | Filter ID and options | |
props | Buffer to hold the encoded options. The size of buffer must have been already determined with lzma_properties_size(). |
It is OK to skip calling this function if lzma_properties_size() indicated that the size of the Filter Properties field is zero.
filter | filter->id must have been set to the correct Filter ID. filter->options doesn't need to be initialized (it's not freed by this function). The decoded options will be stored to filter->options. filter->options is set to NULL if there are no properties or if an error occurs. | |
allocator | Custom memory allocator used to allocate the options. Set to NULL to use the default malloc(), and in case of an error, also free(). | |
props | Input buffer containing the properties. | |
props_size | Size of the properties. This must be the exact size; giving too much or too little input will return LZMA_OPTIONS_ERROR. |
size | Pointer to integer to hold the calculated size | |
filters | Filter ID and associated options whose encoded size is to be calculted |
filters | Filter ID and options to be encoded | |
out | Beginning of the output buffer | |
out_pos | out[*out_pos] is the next write position. This is updated by the encoder. | |
out_size | out[out_size] is the first byte to not write. |
Single-call Index decoder.
Single-call Index encoder.
Initialize Index decoder.
Initialize Index encoder.
Concatenate Indexes of two Streams.
i | Pointer to a lzma_index structure | |
allocator | Pointer to lzma_allocator, or NULL to use malloc() | |
unpadded_size | Unpadded Size of a Block. This can be calculated with lzma_block_unpadded_size() after encoding or decoding the Block. | |
uncompressed_size | Uncompressed Size of a Block. This can be taken directly from lzma_block structure after encoding or decoding the Block. |
dest | Destination Index after which src is appended | |
src | Source Index. The memory allocated for this is either moved to be part of *dest or freed if and only if the function call succeeds, and src will be an invalid pointer. | |
allocator | Custom memory allocator; can be NULL to use malloc() and free(). | |
padding | Size of the Stream Padding field between Streams. This must be a multiple of four. |
strm | Pointer to properly prepared lzma_stream | |
i | Pointer to lzma_index which should be encoded. The read position will be at the end of the Index after lzma_code() has returned LZMA_STREAM_END. |
strm | Pointer to properly prepared lzma_stream | |
i | Pointer to a pointer that will be made to point to the final decoded Index once lzma_code() has returned LZMA_STREAM_END. That is, lzma_index_decoder() always takes care of allocating a new lzma_index structure, and *i doesn't need to be initialized by the caller. | |
memlimit | How much memory the resulting Index is allowed to require. |
i | Index to be encoded. The read position will be at the end of the Index if encoding succeeds, or at unspecified position in case an error occurs. | |
out | Beginning of the output buffer | |
out_pos | The next byte will be written to out[*out_pos]. *out_pos is updated only if encoding succeeds. | |
out_size | Size of the out buffer; the first byte into which no data is written to is out[out_size]. |
i | Pointer to a pointer that will be made to point to the final decoded Index if decoding is successful. That is, lzma_index_buffer_decode() always takes care of allocating a new lzma_index structure, and *i doesn't need to be initialized by the caller. | |
memlimit | Pointer to how much memory the resulting Index is allowed to require. The value pointed by this pointer is modified if and only if LZMA_MEMLIMIT_ERROR is returned. | |
allocator | Pointer to lzma_allocator, or NULL to use malloc() | |
in | Beginning of the input buffer | |
in_pos | The next byte will be read from in[*in_pos]. *in_pos is updated only if decoding succeeds. | |
in_size | Size of the input buffer; the first byte that won't be read is in[in_size]. |
Decode and validate the Index field.
index | Pointer to a lzma_index_hash structure | |
unpadded_size | Unpadded Size of a Block | |
uncompressed_size | Uncompressed Size of a Block |
This function doesn't use lzma_stream structure to pass the input data. Instead, the input buffer is specified using three arguments. This is because it matches better the internal APIs of liblzma.
index_hash | Pointer to a lzma_index_hash structure | |
in | Pointer to the beginning of the input buffer | |
in_pos | in[*in_pos] is the next byte to process | |
in_size | in[in_size] is the first byte not to process |
Decodes variable-length integer.
In the .xz format, most integers are encoded in a variable-length representation, which is sometimes called little endian base-128 encoding. This saves space when smaller values are more likely than bigger values.
The encoding scheme encodes seven bits to every byte, using minimum number of bytes required to represent the given value. Encodings that use non-minimum number of bytes are invalid, thus every integer has exactly one encoded representation. The maximum number of bits in a VLI is 63, thus the vli argument must be at maximum of UINT64_MAX / 2. You should use LZMA_VLI_MAX for clarity.
This function has two modes: single-call and multi-call. Single-call mode encodes the whole integer at once; it is an error if the output buffer is too small. Multi-call mode saves the position in *vli_pos, and thus it is possible to continue encoding if the buffer becomes full before the whole integer has been encoded.
vli | Integer to be encoded | |
vli_pos | How many VLI-encoded bytes have already been written out. When starting to encode a new integer, *vli_pos must be set to zero. To use single-call encoding, set vli_pos to NULL. | |
out | Beginning of the output buffer | |
out_pos | The next byte will be written to out[*out_pos]. | |
out_size | Size of the out buffer; the first byte into which no data is written to is out[out_size]. |
Multi-call (vli_pos != NULL):
Like lzma_vli_encode(), this function has single-call and multi-call modes.
vli | Pointer to decoded integer. The decoder will initialize it to zero when *vli_pos == 0, so application isn't required to initialize *vli. | |
vli_pos | How many bytes have already been decoded. When starting to decode a new integer, *vli_pos must be initialized to zero. To use single-call decoding, set this to NULL. | |
in | Beginning of the input buffer | |
in_pos | The next byte will be read from in[*in_pos]. | |
in_size | Size of the input buffer; the first byte that won't be read is in[in_size]. |
Multi-call (vli_pos != NULL):
References LZMA_BUF_ERROR, LZMA_OK, LZMA_PROG_ERROR, LZMA_STREAM_END, LZMA_VLI_BYTES_MAX, and LZMA_VLI_MAX.