X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fextract.c;h=0ff01a998bc7df954817dd52cd1b72835f94a90d;hb=3ad3ca8734f6326b532b04c158b507210ed6285a;hp=f16baadc62fcb7fd88c2262c5d30bfdbfb2ca411;hpb=520104f5f80056a2adc8ed23ec3a623bcf94c260;p=chaz%2Ftar diff --git a/src/extract.c b/src/extract.c index f16baad..0ff01a9 100644 --- a/src/extract.c +++ b/src/extract.c @@ -193,7 +193,7 @@ check_time (char const *file_name, struct timespec t) if (t.tv_sec <= 0) WARN ((0, 0, _("%s: implausibly old time stamp %s"), file_name, tartime (t, true))); - else if (timespec_cmp (start_time, t) < 0) + else if (timespec_cmp (volume_start_time, t) < 0) { struct timespec now; gettime (&now); @@ -1036,6 +1036,7 @@ extract_volhdr (char *file_name, int typeflag) if (verbose_option) fprintf (stdlis, _("Reading %s\n"), quote (current_stat_info.file_name)); skip_member (); + return 0; } static int @@ -1182,51 +1183,36 @@ void extract_archive (void) { char typeflag; - char *file_name; tar_extractor_t fun; set_next_block_after (current_header); decode_header (current_header, ¤t_stat_info, ¤t_format, 1); - - if (interactive_option && !confirm ("extract", current_stat_info.file_name)) + if (!current_stat_info.file_name[0] + || (interactive_option + && !confirm ("extract", current_stat_info.file_name))) { skip_member (); return; } /* Print the block from current_header and current_stat. */ - if (verbose_option) print_header (¤t_stat_info, -1); - file_name = safer_name_suffix (current_stat_info.file_name, - false, absolute_names_option); - if (strip_name_components) - { - size_t prefix_len = stripped_prefix_len (file_name, - strip_name_components); - if (prefix_len == (size_t) -1) - { - skip_member (); - return; - } - file_name += prefix_len; - } - /* Restore stats for all non-ancestor directories, unless it is an incremental archive. (see NOTICE in the comment to delay_set_stat above) */ if (!delay_directory_restore_option) - apply_nonancestor_delayed_set_stat (file_name, 0); + apply_nonancestor_delayed_set_stat (current_stat_info.file_name, 0); /* Take a safety backup of a previously existing file. */ if (backup_option) - if (!maybe_backup_file (file_name, 0)) + if (!maybe_backup_file (current_stat_info.file_name, 0)) { int e = errno; ERROR ((0, e, _("%s: Was unable to backup this file"), - quotearg_colon (file_name))); + quotearg_colon (current_stat_info.file_name))); skip_member (); return; } @@ -1236,9 +1222,10 @@ extract_archive (void) typeflag = sparse_member_p (¤t_stat_info) ? GNUTYPE_SPARSE : current_header->header.typeflag; - if (prepare_to_extract (file_name, typeflag, &fun)) + if (prepare_to_extract (current_stat_info.file_name, typeflag, &fun)) { - if (fun && (*fun) (file_name, typeflag) && backup_option) + if (fun && (*fun) (current_stat_info.file_name, typeflag) + && backup_option) undo_last_backup (); } else