(print_total_written): Adjust to new human.h interface.

(child_open_for_compress): Do not increase size to BLOCKSIZE.
(open_archive): Open index file name.
Strip trailng slahes from file names.
(flush_write): Set size to 0 if not saving names.
(flush_write, flush_read): Use safer_name_suffix rather than
inline code.
This commit is contained in:
Paul Eggert
2003-07-05 06:19:54 +00:00
parent 15726fabad
commit 664f2dbdd9

View File

@@ -1,7 +1,7 @@
/* Buffer management for tar.
Copyright 1988, 1992, 1993, 1994, 1996, 1997, 1999, 2000, 2001 Free
Software Foundation, Inc.
Copyright (C) 1988, 1992, 1993, 1994, 1996, 1997, 1999, 2000, 2001,
2003 Free Software Foundation, Inc.
Written by John Gilmore, on 1985-08-25.
@@ -66,14 +66,13 @@ static struct stat archive_stat; /* stat block for archive file */
static off_t record_start_block; /* block ordinal at record_start */
/* Where we write list messages (not errors, not interactions) to. Stdout
unless we're writing a pipe, in which case stderr. */
/* Where we write list messages (not errors, not interactions) to. */
FILE *stdlis;
static void backspace_output PARAMS ((void));
static int new_volume PARAMS ((enum access_mode));
static void archive_write_error PARAMS ((ssize_t)) __attribute__ ((noreturn));
static void archive_read_error PARAMS ((void));
static void backspace_output (void);
static int new_volume (enum access_mode);
static void archive_write_error (ssize_t) __attribute__ ((noreturn));
static void archive_read_error (void);
#if !MSDOS
/* Obnoxious test to see if dimwit is trying to dump the archive. */
@@ -137,6 +136,7 @@ print_total_written (void)
char abbr[LONGEST_HUMAN_READABLE + 1];
char rate[LONGEST_HUMAN_READABLE + 1];
double seconds;
int human_opts = human_autoscale | human_base_1024 | human_SI | human_B;
#if HAVE_CLOCK_GETTIME
struct timespec now;
@@ -150,10 +150,10 @@ print_total_written (void)
sprintf (bytes, TARLONG_FORMAT, written);
/* Amanda 2.4.1p1 looks for "Total bytes written: [0-9][0-9]*". */
fprintf (stderr, _("Total bytes written: %s (%sB, %sB/s)\n"), bytes,
human_readable ((uintmax_t) written, abbr, 1, -1024),
fprintf (stderr, _("Total bytes written: %s (%s, %s/s)\n"), bytes,
human_readable (written, abbr, human_opts, 1, 1),
(0 < seconds && written / seconds < (uintmax_t) -1
? human_readable ((uintmax_t) (written / seconds), rate, 1, -1024)
? human_readable (written / seconds, rate, human_opts, 1, 1)
: "?"));
}
@@ -419,8 +419,6 @@ child_open_for_compress (void)
{
size_t size = record_size - length;
if (size < BLOCKSIZE)
size = BLOCKSIZE;
status = safe_read (STDIN_FILENO, cursor, size);
if (status <= 0)
break;
@@ -656,7 +654,14 @@ open_archive (enum access_mode wanted_access)
{
int backed_up_flag = 0;
stdlis = to_stdout_option ? stderr : stdout;
if (index_file_name)
{
stdlis = fopen (index_file_name, "w");
if (! stdlis)
open_error (index_file_name);
}
else
stdlis = to_stdout_option ? stderr : stdout;
if (record_size == 0)
FATAL_ERROR ((0, 0, _("Invalid value for record_size")));
@@ -841,10 +846,11 @@ open_archive (enum access_mode wanted_access)
strcpy (record_start->header.name, volume_label_option);
assign_string (&current_file_name, record_start->header.name);
current_trailing_slash = strip_trailing_slashes (current_file_name);
record_start->header.typeflag = GNUTYPE_VOLHDR;
TIME_TO_CHARS (start_time, record_start->header.mtime);
finish_header (record_start);
finish_header (record_start, -1);
#if 0
current_block++;
#endif
@@ -885,23 +891,18 @@ flush_write (void)
{
if (multi_volume_option)
{
char *cursor;
if (!save_name)
if (save_name)
{
assign_string (&real_s_name, safer_name_suffix (save_name, 0));
real_s_totsize = save_totsize;
real_s_sizeleft = save_sizeleft;
}
else
{
assign_string (&real_s_name, 0);
real_s_totsize = 0;
real_s_sizeleft = 0;
return;
}
cursor = save_name + FILESYSTEM_PREFIX_LEN (save_name);
while (ISSLASH (*cursor))
cursor++;
assign_string (&real_s_name, cursor);
real_s_totsize = save_totsize;
real_s_sizeleft = save_sizeleft;
}
return;
}
@@ -941,7 +942,7 @@ flush_write (void)
volume_label_option, volno);
TIME_TO_CHARS (start_time, record_start->header.mtime);
record_start->header.typeflag = GNUTYPE_VOLHDR;
finish_header (record_start);
finish_header (record_start, -1);
}
if (real_s_name)
@@ -964,7 +965,7 @@ flush_write (void)
record_start->oldgnu_header.offset);
tmp = verbose_option;
verbose_option = 0;
finish_header (record_start);
finish_header (record_start, -1);
verbose_option = tmp;
if (volume_label_option)
@@ -991,12 +992,7 @@ flush_write (void)
assign_string (&real_s_name, 0);
else
{
char *cursor = save_name + FILESYSTEM_PREFIX_LEN (save_name);
while (ISSLASH (*cursor))
cursor++;
assign_string (&real_s_name, cursor);
assign_string (&real_s_name, safer_name_suffix (save_name, 0));
real_s_sizeleft = save_sizeleft;
real_s_totsize = save_totsize;
}
@@ -1068,12 +1064,7 @@ flush_read (void)
{
if (save_name)
{
char *cursor = save_name + FILESYSTEM_PREFIX_LEN (save_name);
while (ISSLASH (*cursor))
cursor++;
assign_string (&real_s_name, cursor);
assign_string (&real_s_name, safer_name_suffix (save_name, 0));
real_s_sizeleft = save_sizeleft;
real_s_totsize = save_totsize;
}