mirror of
https://github.com/golang/go
synced 2024-09-05 16:04:50 +00:00
archive/tar: when writing tar Headers write hdr.Linkname
This should allow symlinks in tar files. Where previously as far as I can see they were skipped completely. R=golang-dev, dsymonds, rsc, bradfitz, bradfitz CC=golang-dev, mike.rosset https://golang.org/cl/4973044
This commit is contained in:
parent
d06753876f
commit
af8b1271eb
BIN
src/pkg/archive/tar/testdata/writer.tar
vendored
BIN
src/pkg/archive/tar/testdata/writer.tar
vendored
Binary file not shown.
|
@ -134,7 +134,7 @@ func (tw *Writer) WriteHeader(hdr *Header) os.Error {
|
|||
tw.numeric(s.next(12), hdr.Mtime) // 136:148
|
||||
s.next(8) // chksum (148:156)
|
||||
s.next(1)[0] = hdr.Typeflag // 156:157
|
||||
s.next(100) // linkname (157:257)
|
||||
tw.cString(s.next(100), hdr.Linkname) // linkname (157:257)
|
||||
copy(s.next(8), []byte("ustar\x0000")) // 257:265
|
||||
tw.cString(s.next(32), hdr.Uname) // 265:297
|
||||
tw.cString(s.next(32), hdr.Gname) // 297:329
|
||||
|
|
|
@ -24,6 +24,10 @@ type writerTest struct {
|
|||
}
|
||||
|
||||
var writerTests = []*writerTest{
|
||||
// The writer test file was produced with this command:
|
||||
// tar (GNU tar) 1.26
|
||||
// ln -s small.txt link.txt
|
||||
// tar -b 1 --format=ustar -c -f writer.tar small.txt small2.txt link.txt
|
||||
&writerTest{
|
||||
file: "testdata/writer.tar",
|
||||
entries: []*writerTestEntry{
|
||||
|
@ -55,6 +59,21 @@ var writerTests = []*writerTest{
|
|||
},
|
||||
contents: "Google.com\n",
|
||||
},
|
||||
&writerTestEntry{
|
||||
header: &Header{
|
||||
Name: "link.txt",
|
||||
Mode: 0777,
|
||||
Uid: 1000,
|
||||
Gid: 1000,
|
||||
Size: 0,
|
||||
Mtime: 1314603082,
|
||||
Typeflag: '2',
|
||||
Linkname: "small.txt",
|
||||
Uname: "strings",
|
||||
Gname: "strings",
|
||||
},
|
||||
// no contents
|
||||
},
|
||||
},
|
||||
},
|
||||
// The truncated test file was produced using these commands:
|
||||
|
|
Loading…
Reference in a new issue