Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 8 Dec 2005 18:56:42 -0500
From:      Brian Fundakowski Feldman <green@freebsd.org>
To:        Dan Nelson <dnelson@allantgroup.com>
Cc:        Steven Hartland <killing@multiplay.co.uk>, freebsd-stable@freebsd.org
Subject:   Re: bsdtar / libarchive bug?
Message-ID:  <20051208235642.GG98704@green.homeunix.org>
In-Reply-To: <20051208234540.GB95420@dan.emsphone.com>
References:  <00c701c5fc1c$e6db4220$b3db87d4@multiplay.co.uk> <20051208225404.GF98704@green.homeunix.org> <20051208234540.GB95420@dan.emsphone.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Dec 08, 2005 at 05:45:40PM -0600, Dan Nelson wrote:
> In the last episode (Dec 08), Brian Fundakowski Feldman said:
> > On Thu, Dec 08, 2005 at 05:29:06PM -0000, Steven Hartland wrote:
> > > It seems bsdtar can create files it cant read. i.e. it will happily create
> > > empty tar.gz files but when it comes to read them the following error
> > > is output:
> > > tar: Unrecognized archive format: Inappropriate file type or format
> > > 
> > > Having a look at libarchive shows the following code:
> > >    /* An empty archive is a serious error. */
> > >    if (bytes_read == 0) {
> > >        archive_set_error(a, ARCHIVE_ERRNO_FILE_FORMAT,
> > >            "Empty input file");
> > >        return (ARCHIVE_FATAL);
> > >    }
> > > 
> > > Which is where I expect the issue is, why would an empty archive
> > > be fatal? I can see any reason for this, yes its strange but there's
> > > nothing fatal about it imo.
> > 
> > I don't think it will "happily create empty tar.gz files", even where
> > by empty you mean the tar itself inside of the gz.
> > 
> > {"/home/green" green@green}$ tar cfv x.tar
> > tar: no files or directories specified
> > {"/home/green" green@green}$ tar cfvz x.tar.gz
> > tar: no files or directories specified
> > {"/home/green" green@green}$ ls -l x.ta*
> > ls: x.ta*: No such file or directory
> 
> I managed to make it create 0-byte files:
> 
> $ touch a
> $ tar cvf b.tar --exclude a a
> $ tar zcvf b.tar.gz --exclude a a
> $ ls -la b.tar*
> -rw-r--r--  1 dan  wheel   0 Dec  8 17:37 b.tar
> -rw-r--r--  1 dan  wheel  20 Dec  8 17:37 b.tar.gz
> $ gunzip -vl b.tar.gz
> method  crc     date  time  compressed  uncompr. ratio uncompressed_name
> defla 00000000 Dec  8 17:37        20         0   0.0% b.tar
> 
> This works because at the time tar creates the output file, it doesn't
> know that I have excluded all the listed files.
> 
> I am leaning towards an empty archive being legal, though, since it
> makes scripting easier.  There may be cases where you are archiving
> files generated daily, and you want to distinguish "no data today" from
> "the archiver didn't run".  At worst it should print a warning.

Just don't let it accept a 0-length gzip.

-- 
Brian Fundakowski Feldman                           \'[ FreeBSD ]''''''''''\
  <> green@FreeBSD.org                               \  The Power to Serve! \
 Opinions expressed are my own.                       \,,,,,,,,,,,,,,,,,,,,,,\



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20051208235642.GG98704>