X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fbuffer.c;h=5977f5a56ed80b17ad6723646fcb46b405928d64;hb=d144e7c217cdd546829dee36bac7d477a9135942;hp=e4225fe1e72e0a2739c93a3af6016c8f1953cd85;hpb=7d4bd5b38da79dc89ce77d4a9434c6d313b6b52e;p=chaz%2Ftar diff --git a/src/buffer.c b/src/buffer.c index e4225fe..5977f5a 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., - 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include @@ -73,7 +73,6 @@ static bool hit_eof; static int checkpoint; static bool read_full_records = false; -static bool reading_from_pipe = false; /* We're reading, but we just read the last block and it's time to update. Declared in update.c @@ -126,23 +125,16 @@ double duration; void set_start_time () { -#if HAVE_CLOCK_GETTIME - if (clock_gettime (CLOCK_REALTIME, &start_timespec) != 0) -#endif - start_time = time (0); + gettime (&start_time); } void compute_duration () { -#if HAVE_CLOCK_GETTIME struct timespec now; - if (clock_gettime (CLOCK_REALTIME, &now) == 0) - duration += ((now.tv_sec - start_timespec.tv_sec) - + (now.tv_nsec - start_timespec.tv_nsec) / 1e9); - else -#endif - duration += time (NULL) - start_time; + gettime (&now); + duration += ((now.tv_sec - start_time.tv_sec) + + (now.tv_nsec - start_time.tv_nsec) / 1e9); set_start_time (); } @@ -160,9 +152,9 @@ struct zip_magic { enum compress_type type; size_t length; - char magic[sizeof "BZh" - 1]; - char program[sizeof "compress"]; - char option[sizeof "-Z"]; + char *magic; + char *program; + char *option; }; static struct zip_magic const magic[] = { @@ -182,21 +174,17 @@ enum compress_type check_compressed_archive () { struct zip_magic const *p; - bool sfr, srp; + bool sfr; /* Prepare global data needed for find_next_block: */ record_end = record_start; /* set up for 1st record = # 0 */ sfr = read_full_records; read_full_records = true; /* Suppress fatal error on reading a partial record */ - srp = reading_from_pipe; - reading_from_pipe = true; /* Suppress warning message on reading a partial - record */ find_next_block (); /* Restore global values */ read_full_records = sfr; - reading_from_pipe = srp; if (tar_checksum (record_start, true) == HEADER_SUCCESS) /* Probably a valid header */ @@ -236,7 +224,7 @@ open_compressed_archive () /* Open compressed archive */ use_compress_program_option = compress_program (type); child_pid = sys_child_open_for_uncompress (); - read_full_records = reading_from_pipe = true; + read_full_records = true; } records_read = 0; @@ -406,7 +394,6 @@ open_archive (enum access_mode wanted_access) access_mode = wanted_access == ACCESS_UPDATE ? ACCESS_READ : wanted_access; read_full_records = read_full_records_option; - reading_from_pipe = false; records_read = 0; @@ -416,7 +403,7 @@ open_archive (enum access_mode wanted_access) { case ACCESS_READ: child_pid = sys_child_open_for_uncompress (); - read_full_records = reading_from_pipe = true; + read_full_records = true; record_end = record_start; /* set up for 1st record = # 0 */ break; @@ -548,7 +535,7 @@ open_archive (enum access_mode wanted_access) strip_trailing_slashes (current_stat_info.file_name); record_start->header.typeflag = GNUTYPE_VOLHDR; - TIME_TO_CHARS (start_time, record_start->header.mtime); + TIME_TO_CHARS (start_time.tv_sec, record_start->header.mtime); finish_header (¤t_stat_info, record_start, -1); } break; @@ -593,7 +580,9 @@ flush_write (void) { if (save_name) { - assign_string (&real_s_name, safer_name_suffix (save_name, false)); + assign_string (&real_s_name, + safer_name_suffix (save_name, false, + absolute_names_option)); real_s_totsize = save_totsize; real_s_sizeleft = save_sizeleft; } @@ -640,7 +629,7 @@ flush_write (void) memset (record_start, 0, BLOCKSIZE); sprintf (record_start->header.name, "%s Volume %d", volume_label_option, volno); - TIME_TO_CHARS (start_time, record_start->header.mtime); + TIME_TO_CHARS (start_time.tv_sec, record_start->header.mtime); record_start->header.typeflag = GNUTYPE_VOLHDR; finish_header (¤t_stat_info, record_start, -1); } @@ -653,8 +642,8 @@ flush_write (void) record_start++; if (strlen (real_s_name) > NAME_FIELD_SIZE) - FATAL_ERROR ((0, 0, - _("%s: file name too long to be stored in a GNU multivolume header"), + WARN ((0, 0, + _("%s: file name too long to be stored in a GNU multivolume header, truncated"), quotearg_colon (real_s_name))); memset (record_start, 0, BLOCKSIZE); @@ -699,7 +688,9 @@ flush_write (void) assign_string (&real_s_name, 0); else { - assign_string (&real_s_name, safer_name_suffix (save_name, false)); + assign_string (&real_s_name, + safer_name_suffix (save_name, false, + absolute_names_option)); real_s_sizeleft = save_sizeleft; real_s_totsize = save_totsize; } @@ -760,20 +751,7 @@ short_read (size_t status) archive_read_error (); if (status == 0) - { - if (!reading_from_pipe) - { - char buf[UINTMAX_STRSIZE_BOUND]; - - WARN((0, 0, - ngettext ("Read %s byte from %s", - "Read %s bytes from %s", - record_size - left), - STRINGIFY_BIGINT (record_size - left, buf), - *archive_name_cursor)); - } - break; - } + break; if (! read_full_records) { @@ -840,7 +818,9 @@ flush_read (void) { if (save_name) { - assign_string (&real_s_name, safer_name_suffix (save_name, false)); + assign_string (&real_s_name, + safer_name_suffix (save_name, false, + absolute_names_option)); real_s_sizeleft = save_sizeleft; real_s_totsize = save_totsize; }