1
0
mirror of https://github.com/golang/go synced 2024-10-03 06:21:21 -06:00

Add support for v7 tar.

R=rsc
APPROVED=rsc
DELTA=32  (26 added, 4 deleted, 2 changed)
OCL=31172
CL=31242
This commit is contained in:
David Symonds 2009-07-06 22:59:31 -07:00
parent 2acbc37166
commit 52ccdf3510
3 changed files with 27 additions and 6 deletions

BIN
src/pkg/archive/tar/testdata/v7.tar vendored Normal file

Binary file not shown.

View File

@ -4,7 +4,7 @@
// The tar package implements access to tar archives.
// It aims to cover most of the variations, including those produced
// by GNU and BSD tars (not yet started).
// by GNU and BSD tars.
//
// References:
// http://www.freebsd.org/cgi/man.cgi?query=tar&sektion=5
@ -12,8 +12,7 @@
package tar
// TODO(dsymonds):
// - Make it seekable.
// - Extensions.
// - pax extensions
import (
"bufio";
@ -211,9 +210,6 @@ func (tr *Reader) readHeader() *Header {
hdr := new(Header);
s := slicer(header);
// TODO(dsymonds): The format of the header depends on the value of magic (hdr[257:262]),
// so use that value to do the correct parsing below.
hdr.Name = cString(s.next(100));
hdr.Mode = tr.octal(s.next(8));
hdr.Uid = tr.octal(s.next(8));
@ -225,6 +221,8 @@ func (tr *Reader) readHeader() *Header {
hdr.Linkname = cString(s.next(100));
// The remainder of the header depends on the value of magic.
// The original (v7) version of tar had no explicit magic field,
// so its magic bytes, like the rest of the block, are NULs.
magic := string(s.next(8)); // contains version field as well.
var format string;
switch magic {

View File

@ -79,6 +79,29 @@ var untarTests = []*untarTest{
},
},
},
&untarTest{
file: "testdata/v7.tar",
headers: []*Header{
&Header{
Name: "small.txt",
Mode: 0640,
Uid: 73025,
Gid: 5000,
Size: 5,
Mtime: 1246508266,
Typeflag: '\x00',
},
&Header{
Name: "small2.txt",
Mode: 0640,
Uid: 73025,
Gid: 5000,
Size: 11,
Mtime: 1245217492,
Typeflag: '\x00',
},
},
},
};
func TestAll(t *testing.T) {