Skip to content

Commit 568f7a6

Browse files
clean style
1 parent b3db785 commit 568f7a6

File tree

1 file changed

+42
-14
lines changed

1 file changed

+42
-14
lines changed

modules/packages/arch/metadata.go

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,40 @@ var (
4242
reOptDep = regexp.MustCompile(`^[a-zA-Z0-9@._+-]+([<>]?=?([0-9]+:)?[a-zA-Z0-9@._+-]+)?(:.*)?$`)
4343
rePkgVer = regexp.MustCompile(`^[a-zA-Z0-9@._+-]+([<>]?=?([0-9]+:)?[a-zA-Z0-9@._+-]+)?$`)
4444

45-
magicZSTD = []byte{0x28, 0xB5, 0x2F, 0xFD}
46-
magicXZ = []byte{0xFD, 0x37, 0x7A, 0x58, 0x5A}
47-
magicGZ = []byte{0x1F, 0x8B}
45+
maxMagicLength = 0
46+
magics = map[string]struct {
47+
magic []byte
48+
archiver func() archiver.Reader
49+
}{
50+
"zst": {
51+
magic: []byte{0x28, 0xB5, 0x2F, 0xFD},
52+
archiver: func() archiver.Reader {
53+
return archiver.NewTarZstd()
54+
},
55+
},
56+
"xz": {
57+
magic: []byte{0xFD, 0x37, 0x7A, 0x58, 0x5A},
58+
archiver: func() archiver.Reader {
59+
return archiver.NewTarXz()
60+
},
61+
},
62+
"gz": {
63+
magic: []byte{0x1F, 0x8B},
64+
archiver: func() archiver.Reader {
65+
return archiver.NewTarGz()
66+
},
67+
},
68+
}
4869
)
4970

71+
func init() {
72+
for _, i := range magics {
73+
if nLen := len(i.magic); nLen > maxMagicLength {
74+
maxMagicLength = nLen
75+
}
76+
}
77+
}
78+
5079
type Package struct {
5180
Name string `json:"name"`
5281
Version string `json:"version"` // Includes version, release and epoch
@@ -94,7 +123,8 @@ func ParsePackage(r *packages.HashedBuffer) (*Package, error) {
94123
if err != nil {
95124
return nil, err
96125
}
97-
header := make([]byte, 5)
126+
127+
header := make([]byte, maxMagicLength)
98128
_, err = r.Read(header)
99129
if err != nil {
100130
return nil, err
@@ -106,16 +136,14 @@ func ParsePackage(r *packages.HashedBuffer) (*Package, error) {
106136

107137
var tarball archiver.Reader
108138
var tarballType string
109-
if bytes.Equal(header[:len(magicZSTD)], magicZSTD) {
110-
tarballType = "zst"
111-
tarball = archiver.NewTarZstd()
112-
} else if bytes.Equal(header[:len(magicXZ)], magicXZ) {
113-
tarballType = "xz"
114-
tarball = archiver.NewTarXz()
115-
} else if bytes.Equal(header[:len(magicGZ)], magicGZ) {
116-
tarballType = "gz"
117-
tarball = archiver.NewTarGz()
118-
} else {
139+
for tarType, info := range magics {
140+
if bytes.Equal(header[:len(info.magic)], info.magic) {
141+
tarballType = tarType
142+
tarball = info.archiver()
143+
break
144+
}
145+
}
146+
if tarballType == "" || tarball == nil {
119147
return nil, errors.New("not supported compression")
120148
}
121149
err = tarball.Open(r, 0)

0 commit comments

Comments
 (0)