diff options
author | Lasse Collin <lasse.collin@tukaani.org> | 2021-01-13 19:16:32 +0200 |
---|---|---|
committer | Lasse Collin <lasse.collin@tukaani.org> | 2021-01-14 18:58:13 +0200 |
commit | 625f4c7c99b2fcc4db9e7ab2deb4884790e2e17c (patch) | |
tree | 0706a4ff7aa1d64ecffdbc9e13c3899d67d3db2f /src/liblzma/common | |
parent | Scripts: Add zstd support to xzdiff. (diff) | |
download | xz-625f4c7c99b2fcc4db9e7ab2deb4884790e2e17c.tar.xz |
liblzma: Add rough support for output-size-limited encoding in LZMA1.
With this it is possible to encode LZMA1 data without EOPM so that
the encoder will encode as much input as it can without exceeding
the specified output size limit. The resulting LZMA1 stream will
be a normal LZMA1 stream without EOPM. The actual uncompressed size
will be available to the caller via the uncomp_size pointer.
One missing thing is that the LZMA layer doesn't inform the LZ layer
when the encoding is finished and thus the LZ may read more input
when it won't be used. However, this doesn't matter if encoding is
done with a single call (which is the planned use case for now).
For proper multi-call encoding this should be improved.
This commit only adds the functionality for internal use.
Nothing uses it yet.
Diffstat (limited to '')
-rw-r--r-- | src/liblzma/common/common.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/liblzma/common/common.h b/src/liblzma/common/common.h index 555c77d1..95313042 100644 --- a/src/liblzma/common/common.h +++ b/src/liblzma/common/common.h @@ -172,6 +172,16 @@ struct lzma_next_coder_s { lzma_ret (*update)(void *coder, const lzma_allocator *allocator, const lzma_filter *filters, const lzma_filter *reversed_filters); + + /// Set how many bytes of output this coder may produce at maximum. + /// On success LZMA_OK must be returned. + /// If the filter chain as a whole cannot support this feature, + /// this must return LZMA_OPTIONS_ERROR. + /// If no input has been given to the coder and the requested limit + /// is too small, this must return LZMA_BUF_ERROR. If input has been + /// seen, LZMA_OK is allowed too. + lzma_ret (*set_out_limit)(void *coder, uint64_t *uncomp_size, + uint64_t out_limit); }; @@ -187,6 +197,7 @@ struct lzma_next_coder_s { .get_check = NULL, \ .memconfig = NULL, \ .update = NULL, \ + .set_out_limit = NULL, \ } |