cvs commit: src/lib/libarchive Makefile archive_write_set_format_pax.c archive_write_set_format_ustar.c src/lib/libarchive/test Makefile test_tar_filenames.c

Tim Kientzle kientzle at freebsd.org
Sat Apr 14 18:51:26 UTC 2007


>>  Conventionally, tar archives have always included a trailing '/'
>>  for directories.  bsdtar used to add this, but that recently got
>>  lost somehow.  So now I'm adding it back in libarchive.
> 
> Is that really a good idea?  Shouldn't this just be fixed in bsdtar's
> display code?

It's not a display problem, it's an archive creation problem.
Very old tar implementations didn't recognize dirs stored in
archives, but could actually extract them correctly as long
as the name ended in '/'.

>>  The only odd part of doing this in libarchive:  Adding a directory to
>>  a tar archive and then reading it back again can yield a different name.
> 
> I can imagine how this might trip up other (hypothetical) libarchive
> consumers...

You may be right.  But not all archive formats
necessarily require trailing '/' on directories and
I've (so far) done pretty well at keeping format-specific
knowledge out of bsdtar.

I could force trailing '/' when creating archives from
bsdtar or ensure the trailing '/' in libarchive for
those formats that require it.  Neither solution is
ideal.

I think I'll stick with it in libarchive, though
I'll change it so that libarchive actually edits the
name in the entry; that way, the client will see the
changed name immediately after writing the header.
(There's precedent for this; some libarchive formats
edit the file size field to indicate how much data
they expect; this allows clients to function
efficiently with formats that do or don't store
duplicate bodies for hard links.)

Thanks for the comments.

Tim


More information about the cvs-src mailing list