From 1dcecfb09b55157b8653d747963069c8bed74f04 Mon Sep 17 00:00:00 2001 From: Lasse Collin Date: Sat, 27 Sep 2008 19:09:21 +0300 Subject: Some API changes, bug fixes, cleanups etc. --- src/liblzma/common/alignment.c | 7 +++---- src/liblzma/common/alone_decoder.c | 11 +++++------ src/liblzma/common/alone_encoder.c | 9 +++++---- src/liblzma/common/chunk_size.c | 2 +- src/liblzma/common/easy.c | 20 ++++++++++++-------- src/liblzma/common/filter_common.c | 4 ++-- src/liblzma/common/filter_decoder.c | 4 ++-- src/liblzma/common/filter_encoder.c | 4 ++-- src/liblzma/common/init_encoder.c | 2 +- 9 files changed, 33 insertions(+), 30 deletions(-) (limited to 'src/liblzma/common') diff --git a/src/liblzma/common/alignment.c b/src/liblzma/common/alignment.c index cfd515e6..ff38062e 100644 --- a/src/liblzma/common/alignment.c +++ b/src/liblzma/common/alignment.c @@ -50,10 +50,9 @@ lzma_alignment_input(const lzma_filter *filters, uint32_t guess) case LZMA_FILTER_IA64: return 16; - case LZMA_FILTER_LZMA: { + case LZMA_FILTER_LZMA1: { const lzma_options_lzma *lzma = filters[i].options; - return 1 << MAX(lzma->pos_bits, - lzma->literal_pos_bits); + return 1 << MAX(lzma->pb, lzma->lp); } default: @@ -91,7 +90,7 @@ lzma_alignment_output(const lzma_filter *filters, uint32_t guess) filters[i].options))->alignment; case LZMA_FILTER_X86: - case LZMA_FILTER_LZMA: + case LZMA_FILTER_LZMA1: return 1; case LZMA_FILTER_ARMTHUMB: diff --git a/src/liblzma/common/alone_decoder.c b/src/liblzma/common/alone_decoder.c index 45cb54e5..7ff29289 100644 --- a/src/liblzma/common/alone_decoder.c +++ b/src/liblzma/common/alone_decoder.c @@ -68,12 +68,11 @@ alone_decode(lzma_coder *coder, break; case SEQ_DICTIONARY_SIZE: - coder->options.dictionary_size + coder->options.dict_size |= (size_t)(in[*in_pos]) << (coder->pos * 8); if (++coder->pos == 4) { - if (coder->options.dictionary_size - > LZMA_DICTIONARY_SIZE_MAX) + if (coder->options.dict_size > (UINT32_C(1) << 30)) return LZMA_FORMAT_ERROR; // A hack to ditch tons of false positives: We allow @@ -81,7 +80,7 @@ alone_decode(lzma_coder *coder, // LZMA_Alone created only files with 2^n, but accepts // any dictionary size. If someone complains, this // will be reconsidered. - uint32_t d = coder->options.dictionary_size - 1; + uint32_t d = coder->options.dict_size - 1; d |= d >> 2; d |= d >> 3; d |= d >> 4; @@ -89,7 +88,7 @@ alone_decode(lzma_coder *coder, d |= d >> 16; ++d; - if (d != coder->options.dictionary_size) + if (d != coder->options.dict_size) return LZMA_FORMAT_ERROR; coder->pos = 0; @@ -199,7 +198,7 @@ lzma_alone_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, next->coder->sequence = SEQ_PROPERTIES; next->coder->pos = 0; - next->coder->options.dictionary_size = 0; + next->coder->options.dict_size = 0; next->coder->uncompressed_size = 0; next->coder->memlimit = memlimit; diff --git a/src/liblzma/common/alone_encoder.c b/src/liblzma/common/alone_encoder.c index 7fb11570..41fb6162 100644 --- a/src/liblzma/common/alone_encoder.c +++ b/src/liblzma/common/alone_encoder.c @@ -106,9 +106,10 @@ alone_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, if (lzma_lzma_lclppb_encode(options, next->coder->header)) return LZMA_PROG_ERROR; - // - Dictionary size (4 bytes) - if (options->dictionary_size < LZMA_DICTIONARY_SIZE_MIN - || options->dictionary_size > LZMA_DICTIONARY_SIZE_MAX) + // - Dictionary size (4 bytes); limit to 1 GiB since that's what + // LZMA SDK currently does for encoding. + if (options->dict_size < LZMA_DICT_SIZE_MIN + || options->dict_size > (UINT32_C(1) << 30)) return LZMA_PROG_ERROR; // Round up to to the next 2^n or 2^n + 2^(n - 1) depending on which @@ -118,7 +119,7 @@ alone_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, // // FIXME Maybe LZMA_Alone needs some lower limit for maximum // dictionary size? Must check decoders from old LZMA SDK version. - uint32_t d = options->dictionary_size - 1; + uint32_t d = options->dict_size - 1; d |= d >> 2; d |= d >> 3; d |= d >> 4; diff --git a/src/liblzma/common/chunk_size.c b/src/liblzma/common/chunk_size.c index 74d4a6f4..33276b28 100644 --- a/src/liblzma/common/chunk_size.c +++ b/src/liblzma/common/chunk_size.c @@ -55,7 +55,7 @@ lzma_chunk_size(const lzma_options_filter *filters) // splitting the data in smaller blocks. break; - case LZMA_FILTER_LZMA: + case LZMA_FILTER_LZMA1: // The block sizes of the possible next filters in // the chain are irrelevant after the LZMA filter. return ((lzma_options_lzma *)(filters->options)) diff --git a/src/liblzma/common/easy.c b/src/liblzma/common/easy.c index 7446bc79..d5e19525 100644 --- a/src/liblzma/common/easy.c +++ b/src/liblzma/common/easy.c @@ -23,6 +23,9 @@ struct lzma_coder_s { lzma_next_coder stream_encoder; + /// Options for LZMA2 + lzma_options_lzma opt_lzma; + /// We need to keep the filters array available in case /// LZMA_FULL_FLUSH is used. lzma_filter filters[5]; @@ -30,7 +33,7 @@ struct lzma_coder_s { static bool -easy_set_filters(lzma_filter *filters, uint32_t level) +easy_set_filters(lzma_coder *coder, uint32_t level) { bool error = false; @@ -40,9 +43,10 @@ easy_set_filters(lzma_filter *filters, uint32_t level) #ifdef HAVE_ENCODER_LZMA2 } else if (level <= 9) { - filters[0].id = LZMA_FILTER_LZMA2; - filters[0].options = (void *)(&lzma_preset_lzma[level - 1]); - filters[1].id = LZMA_VLI_UNKNOWN; + error = lzma_lzma_preset(&coder->opt_lzma, level - 1); + coder->filters[0].id = LZMA_FILTER_LZMA2; + coder->filters[0].options = &coder->opt_lzma; + coder->filters[1].id = LZMA_VLI_UNKNOWN; #endif } else { @@ -91,7 +95,7 @@ easy_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, next->coder->stream_encoder = LZMA_NEXT_CODER_INIT; } - if (easy_set_filters(next->coder->filters, level)) + if (easy_set_filters(next->coder, level)) return LZMA_OPTIONS_ERROR; return lzma_stream_encoder_init(&next->coder->stream_encoder, @@ -116,9 +120,9 @@ lzma_easy_encoder(lzma_stream *strm, lzma_easy_level level) extern LZMA_API uint64_t lzma_easy_memory_usage(lzma_easy_level level) { - lzma_filter filters[5]; - if (easy_set_filters(filters, level)) + lzma_coder coder; + if (easy_set_filters(&coder, level)) return UINT32_MAX; - return lzma_memusage_encoder(filters); + return lzma_memusage_encoder(coder.filters); } diff --git a/src/liblzma/common/filter_common.c b/src/liblzma/common/filter_common.c index 7097ce51..71ceeca0 100644 --- a/src/liblzma/common/filter_common.c +++ b/src/liblzma/common/filter_common.c @@ -38,9 +38,9 @@ static const struct { bool changes_size; } features[] = { -#if defined (HAVE_ENCODER_LZMA) || defined(HAVE_DECODER_LZMA) +#if defined (HAVE_ENCODER_LZMA1) || defined(HAVE_DECODER_LZMA1) { - .id = LZMA_FILTER_LZMA, + .id = LZMA_FILTER_LZMA1, .non_last_ok = false, .last_ok = true, .changes_size = true, diff --git a/src/liblzma/common/filter_decoder.c b/src/liblzma/common/filter_decoder.c index 8b7e532f..241b272d 100644 --- a/src/liblzma/common/filter_decoder.c +++ b/src/liblzma/common/filter_decoder.c @@ -51,9 +51,9 @@ typedef struct { static const lzma_filter_decoder decoders[] = { -#ifdef HAVE_DECODER_LZMA +#ifdef HAVE_DECODER_LZMA1 { - .id = LZMA_FILTER_LZMA, + .id = LZMA_FILTER_LZMA1, .init = &lzma_lzma_decoder_init, .memusage = &lzma_lzma_decoder_memusage, .props_decode = &lzma_lzma_props_decode, diff --git a/src/liblzma/common/filter_encoder.c b/src/liblzma/common/filter_encoder.c index 550d5483..a839fe70 100644 --- a/src/liblzma/common/filter_encoder.c +++ b/src/liblzma/common/filter_encoder.c @@ -62,9 +62,9 @@ typedef struct { static const lzma_filter_encoder encoders[] = { -#ifdef HAVE_ENCODER_LZMA +#ifdef HAVE_ENCODER_LZMA1 { - .id = LZMA_FILTER_LZMA, + .id = LZMA_FILTER_LZMA1, .init = &lzma_lzma_encoder_init, .memusage = &lzma_lzma_encoder_memusage, .chunk_size = NULL, // FIXME diff --git a/src/liblzma/common/init_encoder.c b/src/liblzma/common/init_encoder.c index c5f12a91..1130e6b8 100644 --- a/src/liblzma/common/init_encoder.c +++ b/src/liblzma/common/init_encoder.c @@ -31,7 +31,7 @@ lzma_init_encoder(void) lzma_init_check(); -#if defined(HAVE_SMALL) && defined(HAVE_ENCODER_LZMA) +#if defined(HAVE_SMALL) && defined(HAVE_ENCODER_LZMA1) lzma_rc_init(); #endif -- cgit v1.2.3