/* Update a tar archive.
- Copyright (C) 1988, 1992, 1994, 1996, 1997 Free Software Foundation, Inc.
+ Copyright 1988, 1992, 1994, 1996, 1997, 1999 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
/* We've hit the end of the old stuff, and its time to start writing new
stuff to the tape. This involves seeking back one record and
re-writing the current record (which has been changed). */
-int time_to_start_writing = 0;
+int time_to_start_writing;
/* Pointer to where we started to write in the first record we write out.
This is used if we can't backspace the output and have to null out the
buffer_size = bytes_left;
status = buffer_size % BLOCKSIZE;
if (status)
- memset (start->buffer + bytes_left, 0,
- (size_t) (BLOCKSIZE - status));
+ memset (start->buffer + bytes_left, 0, BLOCKSIZE - status);
}
status = safe_read (handle, start->buffer, buffer_size);
int found_end = 0;
name_gather ();
- if (subcommand_option == UPDATE_SUBCOMMAND)
- name_expand ();
open_archive (ACCESS_UPDATE);
while (!found_end)
if (subcommand_option == UPDATE_SUBCOMMAND
&& (name = name_scan (current_file_name), name))
{
- struct stat stat_data;
+ struct stat s;
enum archive_format unused;
decode_header (current_header, ¤t_stat, &unused, 0);
- if (stat (current_file_name, &stat_data) < 0)
- ERROR ((0, errno, _("Cannot stat %s"), current_file_name));
- else if (current_stat.st_mtime >= stat_data.st_mtime)
- name->found = 1;
+ 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);
}
set_next_block_after (current_header);
if (current_header->oldgnu_header.isextended)
while (path = name_from_list (), path)
{
+ if (excluded_name (path))
+ continue;
if (interactive_option && !confirm ("add", path))
continue;
if (subcommand_option == CAT_SUBCOMMAND)
append_file (path);
else
- dump_file (path, (dev_t) -1, 1);
+ dump_file (path, (dev_t) 0, 1);
}
}