/* Update a tar archive.
- Copyright 1988, 1992, 1994, 1996, 1997, 1999 Free Software Foundation, Inc.
+
+ Copyright (C) 1988, 1992, 1994, 1996, 1997, 1999, 2000, 2001, 2003
+ Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
first part of the record. */
char *output_start;
-/*------------------------------------------------------------------------.
-| Catenate file PATH to the archive without creating a header for it. It |
-| had better be a tar file or the archive is screwed. |
-`------------------------------------------------------------------------*/
-
+/* Catenate file PATH to the archive without creating a header for it.
+ It had better be a tar file or the archive is screwed. */
static void
append_file (char *path)
{
read_fatal_details (path, stat_data.st_size - bytes_left,
buffer_size);
if (status == 0)
- FATAL_ERROR ((0, 0, _("%s: File shrank by %s bytes"),
+ FATAL_ERROR ((0, 0,
+ ngettext ("%s: File shrank by %s byte",
+ "%s: File shrank by %s bytes",
+ bytes_left),
quotearg_colon (path),
STRINGIFY_BIGINT (bytes_left, buf)));
close_error (path);
}
-/*-----------------------------------------------------------------------.
-| Implement the 'r' (add files to end of archive), and 'u' (add files to |
-| end of archive if they arent there, or are more up to date than the |
-| version in the archive.) commands. |
-`-----------------------------------------------------------------------*/
-
+/* Implement the 'r' (add files to end of archive), and 'u' (add files
+ to end of archive if they aren't there, or are more up to date than
+ the version in the archive) commands. */
void
update_archive (void)
{
while (!found_end)
{
- enum read_header status = read_header ();
+ enum read_header status = read_header (false);
switch (status)
{
case HEADER_STILL_UNREAD:
+ case HEADER_SUCCESS_EXTENDED:
abort ();
case HEADER_SUCCESS:
struct name *name;
if (subcommand_option == UPDATE_SUBCOMMAND
- && (name = name_scan (current_file_name), name))
+ && (name = name_scan (current_stat_info.file_name), name))
{
struct stat s;
enum archive_format unused;
- decode_header (current_header, ¤t_stat, &unused, 0);
+ decode_header (current_header, ¤t_stat_info, &unused, 0);
chdir_do (name->change_dir);
- if (deref_stat (dereference_option, current_file_name, &s) == 0
- && s.st_mtime <= current_stat.st_mtime)
- add_avoided_name (current_file_name);
+ if (deref_stat (dereference_option, current_stat_info.file_name, &s) == 0
+ && s.st_mtime <= current_stat_info.stat.st_mtime)
+ add_avoided_name (current_stat_info.file_name);
}
- set_next_block_after (current_header);
- if (current_header->oldgnu_header.isextended)
- skip_extended_headers ();
- skip_file (current_stat.st_size);
+ skip_member ();
break;
}
break;
case HEADER_END_OF_FILE:
+ case HEADER_SUCCESS_EXTENDED:
abort ();
}
break;