(time_to_start_writing): Changed data type
(file_to_switch_to): Removed. Variable never assigned to.
(open_archive) Moved option compatibility checks to tar.c
Other minor changes.
/* Buffer management for tar.
Copyright (C) 1988, 1992, 1993, 1994, 1996, 1997, 1999, 2000, 2001,
/* Buffer management for tar.
Copyright (C) 1988, 1992, 1993, 1994, 1996, 1997, 1999, 2000, 2001,
- 2003 Free Software Foundation, Inc.
+ 2003, 2004 Free Software Foundation, Inc.
Written by John Gilmore, on 1985-08-25.
Written by John Gilmore, on 1985-08-25.
FILE *stdlis;
static void backspace_output (void);
FILE *stdlis;
static void backspace_output (void);
-static int new_volume (enum access_mode);
+static bool new_volume (enum access_mode);
/* PID of child program, if compress_option or remote archive access. */
static pid_t child_pid;
/* PID of child program, if compress_option or remote archive access. */
static pid_t child_pid;
/* Checkpointing counter */
static int checkpoint;
/* Checkpointing counter */
static int checkpoint;
-/* We're reading, but we just read the last block and its time to update. */
-/* As least EXTERN like this one as possible. FIXME! */
-extern int time_to_start_writing;
+/* We're reading, but we just read the last block and it's time to update.
+ Declared in update.c
-int file_to_switch_to = -1; /* if remote update, close archive, and use
- this descriptor to write to */
+ As least EXTERN like this one as possible. (?? --gray)
+ FIXME: Either eliminate it or move it to common.h.
+*/
+extern bool time_to_start_writing;
static int volno = 1; /* which volume of a multi-volume tape we're
on */
static int volno = 1; /* which volume of a multi-volume tape we're
on */
-/* Indicate that we have used all blocks up thru BLOCK.
- FIXME: should the arg have an off-by-1? */
+/* Indicate that we have used all blocks up thru BLOCK. */
void
set_next_block_after (union block *block)
{
void
set_next_block_after (union block *block)
{
/* Return the number of bytes comprising the space between POINTER
through the end of the current buffer of blocks. This space is
available for filling with data, or taking data from. POINTER is
/* Return the number of bytes comprising the space between POINTER
through the end of the current buffer of blocks. This space is
available for filling with data, or taking data from. POINTER is
- usually (but not always) the result previous find_next_block call. */
+ usually (but not always) the result of previous find_next_block call. */
size_t
available_space_after (union block *pointer)
{
size_t
available_space_after (union block *pointer)
{
pattern. Return true if the pattern matches. In case of failure,
retry matching a volume sequence number before giving up in
multi-volume mode. */
pattern. Return true if the pattern matches. In case of failure,
retry matching a volume sequence number before giving up in
multi-volume mode. */
check_label_pattern (union block *label)
{
char *string;
check_label_pattern (union block *label)
{
char *string;
if (! memchr (label->header.name, '\0', sizeof label->header.name))
if (! memchr (label->header.name, '\0', sizeof label->header.name))
if (fnmatch (volume_label_option, label->header.name, 0) == 0)
if (fnmatch (volume_label_option, label->header.name, 0) == 0)
if (!multi_volume_option)
if (!multi_volume_option)
string = xmalloc (strlen (volume_label_option)
+ sizeof VOLUME_LABEL_APPEND + 1);
string = xmalloc (strlen (volume_label_option)
+ sizeof VOLUME_LABEL_APPEND + 1);
if (multi_volume_option)
{
if (multi_volume_option)
{
- if (verify_option)
- FATAL_ERROR ((0, 0, _("Cannot verify multi-volume archives")));
record_start = valloc (record_size + (2 * BLOCKSIZE));
if (record_start)
record_start += 2;
record_start = valloc (record_size + (2 * BLOCKSIZE));
if (record_start)
record_start += 2;
if (use_compress_program_option)
{
if (use_compress_program_option)
{
- if (multi_volume_option)
- FATAL_ERROR ((0, 0, _("Cannot use multi-volume compressed archives")));
- if (verify_option)
- FATAL_ERROR ((0, 0, _("Cannot verify compressed archives")));
-
switch (wanted_access)
{
case ACCESS_READ:
switch (wanted_access)
{
case ACCESS_READ:
break;
case ACCESS_UPDATE:
break;
case ACCESS_UPDATE:
- FATAL_ERROR ((0, 0, _("Cannot update compressed archives")));
+ abort (); /* Should not happen */
case ACCESS_UPDATE:
archive = STDIN_FILENO;
stdlis = stderr;
case ACCESS_UPDATE:
archive = STDIN_FILENO;
stdlis = stderr;
- write_archive_to_stdout = 1;
+ write_archive_to_stdout = true;
record_start->header.typeflag = GNUTYPE_VOLHDR;
TIME_TO_CHARS (start_time, record_start->header.mtime);
finish_header (¤t_stat_info, record_start, -1);
record_start->header.typeflag = GNUTYPE_VOLHDR;
TIME_TO_CHARS (start_time, record_start->header.mtime);
finish_header (¤t_stat_info, record_start, -1);
-#if 0
- current_block++;
-#endif
- assign_string (&real_s_name, safer_name_suffix (save_name, 0));
+ assign_string (&real_s_name, safer_name_suffix (save_name, false));
real_s_totsize = save_totsize;
real_s_sizeleft = save_sizeleft;
}
real_s_totsize = save_totsize;
real_s_sizeleft = save_sizeleft;
}
assign_string (&real_s_name, 0);
else
{
assign_string (&real_s_name, 0);
else
{
- assign_string (&real_s_name, safer_name_suffix (save_name, 0));
+ assign_string (&real_s_name, safer_name_suffix (save_name, false));
real_s_sizeleft = save_sizeleft;
real_s_totsize = save_totsize;
}
real_s_sizeleft = save_sizeleft;
real_s_totsize = save_totsize;
}
- assign_string (&real_s_name, safer_name_suffix (save_name, 0));
+ assign_string (&real_s_name, safer_name_suffix (save_name, false));
real_s_sizeleft = save_sizeleft;
real_s_totsize = save_totsize;
}
real_s_sizeleft = save_sizeleft;
real_s_totsize = save_totsize;
}
- vol_error:
- status = rmtread (archive, record_start->buffer, record_size);
- if (status < 0)
- {
- archive_read_error ();
- goto vol_error;
- }
+ while ((status =
+ rmtread (archive, record_start->buffer, record_size)) < 0)
+ archive_read_error ();
+
if (status != record_size)
short_read (status);
if (status != record_size)
short_read (status);
if (access_mode == ACCESS_READ && time_to_start_writing)
{
access_mode = ACCESS_WRITE;
if (access_mode == ACCESS_READ && time_to_start_writing)
{
access_mode = ACCESS_WRITE;
- time_to_start_writing = 0;
-
- if (file_to_switch_to >= 0)
- {
- if (rmtclose (archive) != 0)
- close_warn (*archive_name_cursor);
-
- archive = file_to_switch_to;
- }
- else
- backspace_output ();
+ time_to_start_writing = false;
+ backspace_output ();
}
/* We've hit the end of the old volume. Close it and open the next one.
}
/* We've hit the end of the old volume. Close it and open the next one.
- Return nonzero on success. */
-static int
+ Return nonzero on success.
+*/
+static bool
new_volume (enum access_mode access)
{
static FILE *read_file;
new_volume (enum access_mode access)
{
static FILE *read_file;
read_file = archive == STDIN_FILENO ? fopen (TTY_NAME, "r") : stdin;
if (now_verifying)
read_file = archive == STDIN_FILENO ? fopen (TTY_NAME, "r") : stdin;
if (now_verifying)
if (verify_option)
verify_volume ();
if (verify_option)
verify_volume ();
+ /* FIXME: Might it be useful to disable the '!' command? */
fprintf (stderr, _("\
n [name] Give a new file name for the next (and subsequent) volume(s)\n\
q Abort tar\n\
fprintf (stderr, _("\
n [name] Give a new file name for the next (and subsequent) volume(s)\n\
q Abort tar\n\
char *name = &input_buffer[1];
char *cursor;
char *name = &input_buffer[1];
char *cursor;
- while (*name == ' ' || *name == '\t')
- name++;
- cursor = name;
- while (*cursor && *cursor != '\n')
- cursor++;
+ for (name = input_buffer + 1;
+ *name == ' ' || *name == '\t';
+ name++)
+ ;
+
+ for (cursor = name; *cursor && *cursor != '\n'; cursor++)
+ ;
*cursor = '\0';
/* FIXME: the following allocation is never reclaimed. */
*cursor = '\0';
/* FIXME: the following allocation is never reclaimed. */
SET_BINARY_MODE (archive);
SET_BINARY_MODE (archive);