bug-tar
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug-tar] Re: Warning message when reading partial blocks from stdin.


From: Paul Eggert
Subject: [Bug-tar] Re: Warning message when reading partial blocks from stdin.
Date: Mon, 18 Apr 2005 11:23:47 -0700
User-agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.4 (gnu/linux)

Laurence Bond <address@hidden> writes:

> Log on to a Solaris 9 machine.
>
> cd /usr/bin
>
> Using Solaris tar create a compressed tar file.
> /usr/bin/tar cf - . | gzip -7 > ~/something.tar.gz
>
> Using GNU tar 1.15.1 (I checked this on both AIX and Solaris)
> gzip -d -c ~/something.tar.gz | gtar1-15.1 tvf - > /dev/null
>
> This generated the message:
> Read 8192 bytes from -

Thanks for the details.  I reproduced the problem, and installed
this patch into the CVS version of GNU tar.  As it happens, the
problem is independent of gzip; it can be reproduced even with
an uncompressed archive.

2005-04-18  Paul Eggert  <address@hidden>

        * src/buffer.c (reading_from_pipe): Remove.  All uses removed.
        (short_read): Don't warn about short reads; they're normal.
        * tests/shortrec.at: New file.
        * tests/testsuite.at: Include it.

--- src/buffer.c        7 Apr 2005 17:26:11 -0000       1.82
+++ src/buffer.c        18 Apr 2005 18:19:03 -0000
@@ -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
@@ -182,21 +181,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 +231,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 +401,6 @@ open_archive (enum access_mode wanted_ac
   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 +410,7 @@ open_archive (enum access_mode wanted_ac
        {
        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;
 
@@ -760,20 +754,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)
        {
--- tests/testsuite.at  7 Apr 2005 17:29:07 -0000       1.9
+++ tests/testsuite.at  18 Apr 2005 18:19:03 -0000
@@ -106,6 +106,8 @@ m4_include([recurse.at])
 m4_include([same-order01.at])
 m4_include([same-order02.at])
 
+m4_include([shortrec.at])
+
 m4_include([sparse01.at])
 m4_include([sparse02.at])
 
--- /dev/null   2003-03-18 13:55:57 -0800
+++ tests/shortrec.at   2005-04-18 10:43:16 -0700
@@ -0,0 +1,39 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+
+# Test suite for GNU tar.
+# Copyright (C) 2005 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 Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# 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.
+
+# Check that tar doesn't complain when reading short records.
+# This can happen when the input blocksize differs from the blocksize
+# used to create the archive.
+
+AT_SETUP([short records])
+AT_KEYWORDS([shortrec.at])
+
+AT_TAR_CHECK([
+mkdir directory
+(cd directory && touch a b c d e f g h i j k l m n o p q r)
+tar -c -b 1 directory | tar -t >/dev/null
+tar -c -b 1 -f archive directory
+tar -t -f archive >/dev/null
+tar -t <archive >/dev/null
+
+rm -r directory
+])
+
+AT_CLEANUP




reply via email to

[Prev in Thread] Current Thread [Next in Thread]