From 664f2dbdd950ddd32587e3b325dd0a0cd48a50a7 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 5 Jul 2003 06:19:54 +0000 Subject: [PATCH] (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. --- src/buffer.c | 73 +++++++++++++++++++++++----------------------------- 1 file changed, 32 insertions(+), 41 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index 1d164b4..8874fe1 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -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 (¤t_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; } -- 2.45.2