Date: Thu, 8 Dec 2005 17:45:40 -0600 From: Dan Nelson <dnelson@allantgroup.com> To: Brian Fundakowski Feldman <green@freebsd.org> Cc: freebsd-stable@freebsd.org, Steven Hartland <killing@multiplay.co.uk> Subject: Re: bsdtar / libarchive bug? Message-ID: <20051208234540.GB95420@dan.emsphone.com> In-Reply-To: <20051208225404.GF98704@green.homeunix.org> References: <00c701c5fc1c$e6db4220$b3db87d4@multiplay.co.uk> <20051208225404.GF98704@green.homeunix.org>
next in thread | previous in thread | raw e-mail | index | archive | help
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. -- Dan Nelson dnelson@allantgroup.com
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20051208234540.GB95420>