diff options
author | Lasse Collin <lasse.collin@tukaani.org> | 2022-11-28 21:57:47 +0200 |
---|---|---|
committer | Lasse Collin <lasse.collin@tukaani.org> | 2022-11-28 22:05:32 +0200 |
commit | 7484744af6cbabe81e92af7d9e061dfd597fff7b (patch) | |
tree | 4d7d476c4039befb9c9ed73879b4b3323d548b15 /src/xz/list.c | |
parent | liblzma: Add lzma_str_to_filters, _from_filters, and _list_filters. (diff) | |
download | xz-7484744af6cbabe81e92af7d9e061dfd597fff7b.tar.xz |
xz: Use lzma_str_from_filters().
Two uses: Displaying encoder filter chain when compressing with -vv,
and displaying the decoder filter chain in --list -vv.
Diffstat (limited to '')
-rw-r--r-- | src/xz/list.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/xz/list.c b/src/xz/list.c index b532a25b..ee61aeb9 100644 --- a/src/xz/list.c +++ b/src/xz/list.c @@ -52,10 +52,13 @@ typedef struct { uint64_t memusage; /// The filter chain of this Block in human-readable form - char filter_chain[FILTERS_STR_SIZE]; + char *filter_chain; } block_header_info; +#define BLOCK_HEADER_INFO_INIT { .filter_chain = NULL } +#define block_header_info_end(bhi) free((bhi)->filter_chain) + /// Strings ending in a colon. These are used for lines like /// " Foo: 123 MiB". These are grouped because translated strings @@ -566,10 +569,19 @@ parse_block_header(file_pair *pair, const lzma_index_iter *iter, } // Convert the filter chain to human readable form. - message_filters_to_str(bhi->filter_chain, filters, false); + const lzma_ret str_ret = lzma_str_from_filters( + &bhi->filter_chain, filters, + LZMA_STR_DECODER | LZMA_STR_GETOPT_LONG, NULL); // Free the memory allocated by lzma_block_header_decode(). lzma_filters_free(filters, NULL); + + // Check if the stringification succeeded. + if (str_ret != LZMA_OK) { + message_error("%s: %s", pair->src_name, message_strm(str_ret)); + return true; + } + return false; data_error: @@ -864,9 +876,6 @@ print_info_adv(xz_file_info *xfi, file_pair *pair) // Cache the verbosity level to a local variable. const bool detailed = message_verbosity_get() >= V_DEBUG; - // Information collected from Block Headers - block_header_info bhi; - // Print information about the Blocks but only if there is // at least one Block. if (lzma_index_block_count(xfi->idx) > 0) { @@ -916,8 +925,11 @@ print_info_adv(xz_file_info *xfi, file_pair *pair) // Iterate over the Blocks. while (!lzma_index_iter_next(&iter, LZMA_INDEX_ITER_BLOCK)) { + // If in detailed mode, collect the information from + // Block Header before starting to print the next line. + block_header_info bhi = BLOCK_HEADER_INFO_INIT; if (detailed && parse_details(pair, &iter, &bhi, xfi)) - return true; + return true; const char *cols1[4] = { uint64_to_str(iter.stream.number, 0), @@ -1001,6 +1013,7 @@ print_info_adv(xz_file_info *xfi, file_pair *pair) } putchar('\n'); + block_header_info_end(&bhi); } } @@ -1058,9 +1071,9 @@ print_info_robot(xz_file_info *xfi, file_pair *pair) iter.stream.padding); lzma_index_iter_rewind(&iter); - block_header_info bhi; while (!lzma_index_iter_next(&iter, LZMA_INDEX_ITER_BLOCK)) { + block_header_info bhi = BLOCK_HEADER_INFO_INIT; if (message_verbosity_get() >= V_DEBUG && parse_details( pair, &iter, &bhi, xfi)) @@ -1091,6 +1104,7 @@ print_info_robot(xz_file_info *xfi, file_pair *pair) bhi.filter_chain); putchar('\n'); + block_header_info_end(&bhi); } } |