This is a discussion on Re: tar and trailing slash for dirnames. within the mailing.openbsd.tech forums, part of the OpenBSD category; --> On Sun, 13 Mar 2005, Han Boetes wrote: > Hi, > > If I make a tarball with tar ...
| |||||||
| FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| On Sun, 13 Mar 2005, Han Boetes wrote: > Hi, > > If I make a tarball with tar I get a slightly different result with tar > and gtar: The difference is the trailing / for the dirname `foo.' > > ~% mkdir foo > ~% touch foo/bar > ~% tar czf 1.tgz foo > ~% gtar czf 2.tgz foo > > ~% tar tzf 1.tgz > foo > foo/bar > ~% tar tzf 2.tgz > foo > foo/bar > > ~% gtar tzf 1.tgz > foo > foo/bar > ~% gtar tzf 2.tgz > foo/ > foo/bar > > > Now reading the sourcecode: /usr/src/bin/pax/tar.c > > /* > * strip off any trailing slash. > */ > if (*pt == '/') { > *pt = '\0'; > --arcn->nlen; > } > > So it is done on purpose. But it is incompatible with gtar. And I just > happen to run into a situation where this behaviour is required, so I > would like to request the change of this behaviour. Or perhaps somebody > can enlighten me why this is the prefered behaviour. > > Of course I have no say in this, I can only ask kindly. I do not think you ever tested your suggestion. It is in a piece of code that reads old-style tar archives. This is the piece of code that _is_ relevant: /* * Some programs that create ustar archives append a '/' * to the pathname for directories. This clearly violates * ustar specs, but we will silently strip it off anyway. */ if (arcn->name[arcn->nlen - 1] == '/') arcn->name[--arcn->nlen] = '\0'; As you can see with hexdump -C of archives created by gtar, gtar is such a program. I do not feel like changing tar just to accomodate non-conforming programs. -Otto |