aboutsummaryrefslogtreecommitdiff
path: root/src/lzma/args.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lzma/args.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/src/lzma/args.c b/src/lzma/args.c
index 2ddb93ed..ddaa0f91 100644
--- a/src/lzma/args.c
+++ b/src/lzma/args.c
@@ -124,7 +124,7 @@ static const struct option long_opts[] = {
static void
add_filter(lzma_vli id, const char *opt_str)
{
- if (filter_count == 7) {
+ if (filter_count == LZMA_BLOCK_FILTERS_MAX) {
errmsg(V_ERROR, _("Maximum number of filters is seven"));
my_exit(ERROR);
}
@@ -142,7 +142,7 @@ add_filter(lzma_vli id, const char *opt_str)
= parse_options_delta(opt_str);
break;
- case LZMA_FILTER_LZMA:
+ case LZMA_FILTER_LZMA1:
case LZMA_FILTER_LZMA2:
opt_filters[filter_count].options
= parse_options_lzma(opt_str);
@@ -301,7 +301,7 @@ parse_real(int argc, char **argv)
break;
case OPT_LZMA1:
- add_filter(LZMA_FILTER_LZMA, optarg);
+ add_filter(LZMA_FILTER_LZMA1, optarg);
break;
case OPT_LZMA2:
@@ -452,11 +452,17 @@ parse_environment(void)
static void
set_compression_settings(void)
{
+ static lzma_options_lzma opt_lzma;
+
if (filter_count == 0) {
+ if (lzma_lzma_preset(&opt_lzma, preset_number)) {
+ errmsg(V_ERROR, _("Internal error (bug)"));
+ my_exit(ERROR);
+ }
+
opt_filters[0].id = opt_header == HEADER_ALONE
- ? LZMA_FILTER_LZMA : LZMA_FILTER_LZMA2;
- opt_filters[0].options = (lzma_options_lzma *)(
- lzma_preset_lzma + preset_number);
+ ? LZMA_FILTER_LZMA1 : LZMA_FILTER_LZMA2;
+ opt_filters[0].options = &opt_lzma;
filter_count = 1;
}
@@ -466,12 +472,14 @@ set_compression_settings(void)
// If we are using the LZMA_Alone format, allow exactly one filter
// which has to be LZMA.
if (opt_header == HEADER_ALONE && (filter_count != 1
- || opt_filters[0].id != LZMA_FILTER_LZMA)) {
- errmsg(V_ERROR, _("With --format=alone only the LZMA filter "
+ || opt_filters[0].id != LZMA_FILTER_LZMA1)) {
+ errmsg(V_ERROR, _("With --format=alone only the LZMA1 filter "
"is supported"));
my_exit(ERROR);
}
+ // TODO: liblzma probably needs an API to validate the filter chain.
+
// If using --format=raw, we can be decoding.
uint64_t memory_usage = opt_mode == MODE_COMPRESS
? lzma_memusage_encoder(opt_filters)
@@ -488,10 +496,11 @@ set_compression_settings(void)
my_exit(ERROR);
}
- --preset_number;
- opt_filters[0].options = (lzma_options_lzma *)(
- lzma_preset_lzma
- + preset_number);
+ if (lzma_lzma_preset(&opt_lzma, --preset_number)) {
+ errmsg(V_ERROR, _("Internal error (bug)"));
+ my_exit(ERROR);
+ }
+
memory_usage = lzma_memusage_encoder(opt_filters);
}
} else {