Add zstd to reader

Signed-off-by: Tudor Marcu <tudor.marcu@intel.com>
This commit is contained in:
Tudor Marcu
2018-08-09 15:43:26 -07:00
committed by tmarcu
parent b114ee237b
commit 9e421237c4
+9 -1
View File
@@ -29,6 +29,8 @@ var (
gzipMagic = []byte{0x1F, 0x8B}
xzMagic = []byte{0xFD, '7', 'z', 'X', 'Z', 0x00}
bzip2Magic = []byte{'B', 'Z', 'h'}
// https://github.com/facebook/zstd/blob/dev/lib/zstd.h#L385
zstdMagic = []byte{0x28, 0xB5, 0x2F, 0xFD}
)
// NewCompressedTarReader creates a struct compatible with tar.Reader reading from uncompressed or
@@ -44,7 +46,6 @@ func NewCompressedTarReader(rs io.ReadSeeker) (*CompressedTarReader, error) {
return nil, err
}
result := &CompressedTarReader{}
switch {
case bytes.HasPrefix(h[:], gzipMagic):
gr, err := gzip.NewReader(rs)
@@ -63,6 +64,13 @@ func NewCompressedTarReader(rs io.ReadSeeker) (*CompressedTarReader, error) {
case bytes.HasPrefix(h[:], bzip2Magic):
br := bzip2.NewReader(rs)
result.Reader = tar.NewReader(br)
case bytes.HasPrefix(h[:], zstdMagic):
zr, err := NewExternalReader(rs, "zstd", "-d")
if err != nil {
return nil, fmt.Errorf("couldn't decompress using zstd: %s", err)
}
result.CompressionCloser = zr
result.Reader = tar.NewReader(zr)
default:
// Assume uncompressed tar and let it complain if not valid.
result.Reader = tar.NewReader(rs)