diff options
author | Lasse Collin <lasse.collin@tukaani.org> | 2021-09-05 20:38:12 +0300 |
---|---|---|
committer | Lasse Collin <lasse.collin@tukaani.org> | 2021-09-05 20:38:12 +0300 |
commit | d267d109c370a40b502e73f8664b154b15e4f253 (patch) | |
tree | 0159c362319f4c47d309b8ed09db97998ddbf02d /src/liblzma/common/erofs_encoder.c | |
parent | xzdiff: Update the man page about the exit status. (diff) | |
download | xz-d267d109c370a40b502e73f8664b154b15e4f253.tar.xz |
liblzma: Rename EROFS LZMA to MicroLZMA.
It still exists primarily for EROFS but MicroLZMA is
a more generic name (that hopefully doesn't clash with
something that already exists).
Diffstat (limited to 'src/liblzma/common/erofs_encoder.c')
-rw-r--r-- | src/liblzma/common/erofs_encoder.c | 139 |
1 files changed, 0 insertions, 139 deletions
diff --git a/src/liblzma/common/erofs_encoder.c b/src/liblzma/common/erofs_encoder.c deleted file mode 100644 index 4cdd08f1..00000000 --- a/src/liblzma/common/erofs_encoder.c +++ /dev/null @@ -1,139 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file erofs_encoder.c -/// \brief Encode into EROFS LZMA format -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "lzma_encoder.h" - - -typedef struct { - /// LZMA1 encoder - lzma_next_coder lzma; - - /// LZMA properties byte (lc/lp/pb) - uint8_t props; -} lzma_erofs_coder; - - -static lzma_ret -erofs_encode(void *coder_ptr, const lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - lzma_erofs_coder *coder = coder_ptr; - - // Remember *out_pos so that we can overwrite the first byte with - // the LZMA properties byte. - const size_t out_start = *out_pos; - - // Remember *in_pos so that we can set it based on how many - // uncompressed bytes were actually encoded. - const size_t in_start = *in_pos; - - // Set the output size limit based on the available output space. - // We know that the encoder supports set_out_limit() so - // LZMA_OPTIONS_ERROR isn't possible. LZMA_BUF_ERROR is possible - // but lzma_code() has an assertion to not allow it to be returned - // from here and I don't want to change that for now, so - // LZMA_BUF_ERROR becomes LZMA_PROG_ERROR. - uint64_t uncomp_size; - if (coder->lzma.set_out_limit(coder->lzma.coder, - &uncomp_size, out_size - *out_pos) != LZMA_OK) - return LZMA_PROG_ERROR; - - // set_out_limit fails if this isn't true. - assert(out_size - *out_pos >= 6); - - // Encode as much as possible. - const lzma_ret ret = coder->lzma.code(coder->lzma.coder, allocator, - in, in_pos, in_size, out, out_pos, out_size, action); - - if (ret != LZMA_STREAM_END) { - if (ret == LZMA_OK) { - assert(0); - return LZMA_PROG_ERROR; - } - - return ret; - } - - // The first output byte is bitwise-negation of the properties byte. - // We know that there is space for this byte because set_out_limit - // and the actual encoding succeeded. - out[out_start] = (uint8_t)(~coder->props); - - // The LZMA encoder likely read more input than it was able to encode. - // Set *in_pos based on uncomp_size. - assert(uncomp_size <= in_size - in_start); - *in_pos = in_start + (size_t)(uncomp_size); - - return ret; -} - - -static void -erofs_encoder_end(void *coder_ptr, const lzma_allocator *allocator) -{ - lzma_erofs_coder *coder = coder_ptr; - lzma_next_end(&coder->lzma, allocator); - lzma_free(coder, allocator); - return; -} - - -static lzma_ret -erofs_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator, - const lzma_options_lzma *options) -{ - lzma_next_coder_init(&erofs_encoder_init, next, allocator); - - lzma_erofs_coder *coder = next->coder; - - if (coder == NULL) { - coder = lzma_alloc(sizeof(lzma_erofs_coder), allocator); - if (coder == NULL) - return LZMA_MEM_ERROR; - - next->coder = coder; - next->code = &erofs_encode; - next->end = &erofs_encoder_end; - - coder->lzma = LZMA_NEXT_CODER_INIT; - } - - // Encode the properties byte. Bitwise-negation of it will be the - // first output byte. - return_if_error(lzma_lzma_lclppb_encode(options, &coder->props)); - - // Initialize the LZMA encoder. - const lzma_filter_info filters[2] = { - { - .init = &lzma_lzma_encoder_init, - .options = (void *)(options), - }, { - .init = NULL, - } - }; - - return lzma_next_filter_init(&coder->lzma, allocator, filters); -} - - -extern LZMA_API(lzma_ret) -lzma_erofs_encoder(lzma_stream *strm, const lzma_options_lzma *options) -{ - lzma_next_strm_init(erofs_encoder_init, strm, options); - - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; - -} |