X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Flist.c;h=667607d7a196a563426254d3afcbe4762a2b7eb1;hb=c641a16cba34ec0b0f1fb41dcdd7a27c9b760a83;hp=ddf044df0e1f1621b8669aceacbf42df43b2c297;hpb=d659cbaccdc1f3279c49107cf15f15a639738529;p=chaz%2Ftar diff --git a/src/list.c b/src/list.c index ddf044d..667607d 100644 --- a/src/list.c +++ b/src/list.c @@ -99,8 +99,8 @@ read_and (void (*do_something) (void)) /* FIXME: Grab fractional time stamps from extended header. */ mtime.tv_nsec = 0, - set_stat_mtime (¤t_stat_info.stat, mtime), - OLDER_STAT_TIME (current_stat_info.stat, m))) + current_stat_info.mtime = mtime, + OLDER_TAR_STAT_TIME (current_stat_info, m))) || excluded_name (current_stat_info.file_name)) { switch (current_header->header.typeflag) @@ -210,7 +210,7 @@ list_archive (void) decode_header (current_header, ¤t_stat_info, ¤t_format, 0); if (verbose_option) print_header (¤t_stat_info, -1); - + if (incremental_option && current_header->header.typeflag == GNUTYPE_DUMPDIR) { off_t size; @@ -236,23 +236,15 @@ list_archive (void) written = available_space_after (data_block); if (written > size) written = size; - errno = 0; - check = fwrite (data_block->buffer, sizeof (char), written, stdlis); set_next_block_after ((union block *) (data_block->buffer + written - 1)); - if (check != written) - { - write_error_details (current_stat_info.file_name, check, written); - skip_file (size - written); - break; - } + if (verbose_option > 2) + list_dumpdir (data_block->buffer, written); } if (multi_volume_option) assign_string (&save_name, 0); - fputc ('\n', stdlis); - fflush (stdlis); - return; + return; } if (multi_volume_option) @@ -520,9 +512,6 @@ decode_header (union block *header, struct tar_stat_info *stat_info, enum archive_format *format_pointer, int do_user_group) { enum archive_format format; - struct timespec atime; - struct timespec ctime; - struct timespec mtime; if (strcmp (header->header.magic, TMAGIC) == 0) { @@ -544,9 +533,8 @@ decode_header (union block *header, struct tar_stat_info *stat_info, *format_pointer = format; stat_info->stat.st_mode = MODE_FROM_HEADER (header->header.mode); - mtime.tv_sec = TIME_FROM_HEADER (header->header.mtime); - mtime.tv_nsec = 0; - set_stat_mtime (&stat_info->stat, mtime); + stat_info->mtime.tv_sec = TIME_FROM_HEADER (header->header.mtime); + stat_info->mtime.tv_nsec = 0; assign_string (&stat_info->uname, header->header.uname[0] ? header->header.uname : NULL); assign_string (&stat_info->gname, @@ -554,21 +542,18 @@ decode_header (union block *header, struct tar_stat_info *stat_info, if (format == OLDGNU_FORMAT && incremental_option) { - atime.tv_sec = TIME_FROM_HEADER (header->oldgnu_header.atime); - ctime.tv_sec = TIME_FROM_HEADER (header->oldgnu_header.ctime); - atime.tv_nsec = ctime.tv_nsec = 0; + stat_info->atime.tv_sec = TIME_FROM_HEADER (header->oldgnu_header.atime); + stat_info->ctime.tv_sec = TIME_FROM_HEADER (header->oldgnu_header.ctime); + stat_info->atime.tv_nsec = stat_info->ctime.tv_nsec = 0; } else if (format == STAR_FORMAT) { - atime.tv_sec = TIME_FROM_HEADER (header->star_header.atime); - ctime.tv_sec = TIME_FROM_HEADER (header->star_header.ctime); - atime.tv_nsec = ctime.tv_nsec = 0; + stat_info->atime.tv_sec = TIME_FROM_HEADER (header->star_header.atime); + stat_info->ctime.tv_sec = TIME_FROM_HEADER (header->star_header.ctime); + stat_info->atime.tv_nsec = stat_info->ctime.tv_nsec = 0; } else - atime = ctime = start_time; - - set_stat_atime (&stat_info->stat, atime); - set_stat_ctime (&stat_info->stat, ctime); + stat_info->atime = stat_info->ctime = start_time; if (format == V7_FORMAT) { @@ -1024,6 +1009,27 @@ print_header (struct tar_stat_info *st, off_t block_ordinal) int pad; int sizelen; + if (test_label_option && current_header->header.typeflag != GNUTYPE_VOLHDR) + return; + + if (show_stored_names_option) + { + switch (subcommand_option) + { + case CAT_SUBCOMMAND: + case UPDATE_SUBCOMMAND: + case APPEND_SUBCOMMAND: + case CREATE_SUBCOMMAND: + temp_name = st->file_name ? st->file_name : st->orig_file_name; + break; + + default: + temp_name = st->orig_file_name ? st->orig_file_name : st->file_name; + } + } + else + temp_name = st->orig_file_name ? st->orig_file_name : st->file_name; + if (block_number_option) { char buf[UINTMAX_STRSIZE_BOUND]; @@ -1102,7 +1108,7 @@ print_header (struct tar_stat_info *st, off_t block_ordinal) /* Time stamp. */ - time_stamp = tartime (get_stat_mtime (&st->stat), false); + time_stamp = tartime (st->mtime, false); time_stamp_len = strlen (time_stamp); if (datewidth < time_stamp_len) datewidth = time_stamp_len;