From 231c3c7098f1099a56abb8afece76fc9b8699f05 Mon Sep 17 00:00:00 2001 From: Lasse Collin Date: Sun, 31 Jan 2010 12:01:54 +0200 Subject: Delay opening the destionation file and other fixes. The opening of the destination file is now delayed a little. The coder is initialized, and if decompressing, the memory usage of the first Block compared against the memory usage limit before the destination file is opened. This means that if --force was used, the old "target" file won't be deleted so easily when something goes wrong very early. Thanks to Mark K for the bug report. The above fix required some changes to progress message handling. Now there is a separate function for setting and printing the filename. It is used also in list.c. list_file() now handles stdin correctly (gives an error). A useless check for user_abort was removed from file_io.c. --- src/xz/list.c | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) (limited to 'src/xz/list.c') diff --git a/src/xz/list.c b/src/xz/list.c index bb793e02..1e487b55 100644 --- a/src/xz/list.c +++ b/src/xz/list.c @@ -444,15 +444,7 @@ print_adv_helper(uint64_t stream_count, uint64_t block_count, static void print_info_adv(const lzma_index *idx, file_pair *pair) { - // Print an empty line between files. - static bool first_filename_printed = false; - if (!first_filename_printed) - first_filename_printed = true; - else - putchar('\n'); - - // Print the filename and overall information. - printf("%s (%" PRIu64 "):\n", pair->src_name, totals.files); + // Print the overall information. print_adv_helper(lzma_index_stream_count(idx), lzma_index_block_count(idx), lzma_index_file_size(idx), @@ -708,21 +700,19 @@ list_file(const char *filename) message_fatal(_("--list works only on .xz files " "(--format=xz or --format=auto)")); - if (strcmp(filename, "-") == 0) { + message_filename(filename); + + if (filename == stdin_filename) { message_error(_("--list does not support reading from " "standard input")); return; } - if (is_empty_filename(filename)) - return; - - // Set opt_stdout so that io_open() won't create a new file. - // Disable also sparse mode so that it doesn't remove O_APPEND - // from stdout. - opt_stdout = true; - io_no_sparse(); - file_pair *pair = io_open(filename); + // Unset opt_stdout so that io_open_src() won't accept special files. + // Set opt_force so that io_open_src() will follow symlinks. + opt_stdout = false; + opt_force = true; + file_pair *pair = io_open_src(filename); if (pair == NULL) return; -- cgit v1.2.3