mirror of
https://github.com/clearlinux/mixer-tools.git
synced 2026-09-06 13:41:46 +00:00
+9
-1
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user