list.c File Reference

Listing information about .xz files. More...

`#include "private.h"`
`#include "tuklib_integer.h"`

## Data Structures

struct | xz_file_info
| Information about a .xz file. More...
struct | block_header_info
| Information about a .xz Block. More...

## Macros

#define | XZ_FILE_INFO_INIT { NULL, 0, 0, true, 50000002 }
#define | CHECKS_STR_SIZE 1024

## Functions

static const char * | xz_ver_to_str (uint32_t ver)
| Convert XZ Utils version number to a string. More...
static bool | parse_indexes (xz_file_info *xfi, file_pair *pair)
| Parse the Index(es) from the given .xz file. More...
static bool | parse_block_header (file_pair *pair, const lzma_index_iter *iter, block_header_info *bhi, xz_file_info *xfi)
| Parse the Block Header. More...
static bool | parse_check_value (file_pair *pair, const lzma_index_iter *iter)
| Parse the Check field and put it into check_value[]. More...
static bool | parse_details (file_pair *pair, const lzma_index_iter *iter, block_header_info *bhi, xz_file_info *xfi)
| Parse detailed information about a Block. More...
static const char * | get_ratio (uint64_t compressed_size, uint64_t uncompressed_size)
| Get the compression ratio. More...
static void | get_check_names (char buf[CHECKS_STR_SIZE], uint32_t checks, bool space_after_comma)
| Get a comma-separated list of Check names. More...
static bool | print_info_basic (const xz_file_info *xfi, file_pair *pair)
static void | print_adv_helper (uint64_t stream_count, uint64_t block_count, uint64_t compressed_size, uint64_t uncompressed_size, uint32_t checks, uint64_t stream_padding)
static bool | print_info_adv (xz_file_info *xfi, file_pair *pair)
static bool | print_info_robot (xz_file_info *xfi, file_pair *pair)
static void | update_totals (const xz_file_info *xfi)
static void | print_totals_basic (void)
static void | print_totals_adv (void)
static void | print_totals_robot (void)
void | list_totals (void)
| Show the totals after all files have been listed. More...
void | list_file (const char *filename)
| List information about the given .xz file. More...

## Variables

static const char | check_names [LZMA_CHECK_ID_MAX+1][12]
| Check ID to string mapping. More...
static char | check_value [2 *LZMA_CHECK_SIZE_MAX+1]
struct {
uint64_t files
uint64_t streams
uint64_t blocks
uint64_t compressed_size
uint64_t uncompressed_size
uint64_t stream_padding
uint64_t memusage_max
uint32_t checks
uint32_t min_version
bool all_have_sizes
} | totals = { 0, 0, 0, 0, 0, 0, 0, 0, 50000002, true }

## Detailed Description

Listing information about .xz files.

## Macro Definition Documentation

## CHECKS_STR_SIZE

#define CHECKS_STR_SIZE 1024

Buffer size for get_check_names(). This may be a bit ridiculous, but at least it's enough if some language needs many multibyte chars.

## Function Documentation

## xz_ver_to_str()

static const char* xz_ver_to_str | ( | uint32_t | ver | ) |

static

Convert XZ Utils version number to a string.

## parse_indexes()

static bool parse_indexes | ( | xz_file_info * | xfi,
|  | file_pair * | pair
| ) |  |

static

Parse the Index(es) from the given .xz file.

Parameters

  xfi | Pointer to structure where the decoded information is stored.
  pair | Input file

Returns
  On success, false is returned. On error, true is returned.

References message_error(), and file_pair::src_st.

## parse_block_header()

static bool parse_block_header | ( | file_pair * | pair,
|  | const lzma_index_iter * | iter,
|  | block_header_info * | bhi,
|  | xz_file_info * | xfi
| ) |  |

static

Parse the Block Header.

The result is stored into *bhi. The caller takes care of initializing it.

Returns
  False on success, true on error.

Referenced by parse_details().

## parse_check_value()

static bool parse_check_value | ( | file_pair * | pair,
|  | const lzma_index_iter * | iter
| ) |  |

static

Parse the Check field and put it into check_value[].

Returns
  False on success, true on error.

References lzma_stream_flags::check, check_value, lzma_index_iter::compressed_file_offset, lzma_index_iter::flags, io_pread(), LZMA_CHECK_NONE, lzma_check_size(), and lzma_index_iter::total_size.

Referenced by parse_details().

## parse_details()

static bool parse_details | ( | file_pair * | pair,
|  | const lzma_index_iter * | iter,
|  | block_header_info * | bhi,
|  | xz_file_info * | xfi
| ) |  |

static

Parse detailed information about a Block.

Since this requires seek(s), listing information about all Blocks can be slow.

Parameters

  pair | Input file
  iter | Location of the Block whose Check value should be printed.
  bhi | Pointer to structure where to store the information about the Block Header field.

Returns
  False on success, true on error. If an error occurs, the error message is printed too so the caller doesn't need to worry about that.

References parse_block_header(), and parse_check_value().

## get_ratio()

static const char* get_ratio | ( | uint64_t | compressed_size,
|  | uint64_t | uncompressed_size
| ) |  |

static

Get the compression ratio.

This has slightly different format than that is used in message.c.

## get_check_names()

static void get_check_names | ( | char | buf[CHECKS_STR_SIZE],
|  | uint32_t | checks,
|  | bool | space_after_comma
| ) |  |

static

Get a comma-separated list of Check names.

The check names are translated with gettext except when in robot mode.

Parameters

  buf | Buffer to hold the resulting string
  checks | Bit mask of Checks to print
  space_after_comma | It's better to not use spaces in table-like listings, but in more verbose formats a space after a comma is good for readability.

## list_totals()

void list_totals | ( | void |  | ) |

Show the totals after all files have been listed.

## list_file()

void list_file | ( | const char * | filename | ) |

List information about the given .xz file.

References opt_format.

## Variable Documentation

## check_names

const char check_names[LZMA_CHECK_ID_MAX+1][12]

static

Initial value:
= {
N_("None"),
"CRC32",
N_("Unknown-2"),
N_("Unknown-3"),
"CRC64",
N_("Unknown-5"),
N_("Unknown-6"),
N_("Unknown-7"),
N_("Unknown-8"),
N_("Unknown-9"),
"SHA-256",
N_("Unknown-11"),
N_("Unknown-12"),
N_("Unknown-13"),
N_("Unknown-14"),
N_("Unknown-15"),
}

Check ID to string mapping.

## check_value

char check_value[2 *LZMA_CHECK_SIZE_MAX+1]

static

Value of the Check field as hexadecimal string. This is set by parse_check_value().

Referenced by parse_check_value().

##

struct { ... } totals

Totals that are displayed if there was more than one file. The "files" counter is also used in print_info_adv() to show the file number.