bsdtar / libarchive bug?
Dan Nelson
dnelson at allantgroup.com
Thu Dec 8 15:46:39 PST 2005
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 at green}$ tar cfv x.tar
> tar: no files or directories specified
> {"/home/green" green at green}$ tar cfvz x.tar.gz
> tar: no files or directories specified
> {"/home/green" green at 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.
--
Dan Nelson
dnelson at allantgroup.com
More information about the freebsd-stable
mailing list