feat: init nightly vuls for blackhat
This commit is contained in:
76
pkg/util/util.go
Normal file
76
pkg/util/util.go
Normal file
@@ -0,0 +1,76 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"compress/bzip2"
|
||||
"compress/gzip"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/ulikunitz/xz"
|
||||
"golang.org/x/exp/maps"
|
||||
)
|
||||
|
||||
func CacheDir() string {
|
||||
cacheDir, err := os.UserCacheDir()
|
||||
if err != nil {
|
||||
cacheDir = os.TempDir()
|
||||
}
|
||||
dir := filepath.Join(cacheDir, "vuls")
|
||||
return dir
|
||||
}
|
||||
|
||||
func Unique[T comparable](s []T) []T {
|
||||
m := map[T]struct{}{}
|
||||
for _, v := range s {
|
||||
m[v] = struct{}{}
|
||||
}
|
||||
return maps.Keys(m)
|
||||
}
|
||||
|
||||
func Read(path string) ([]byte, error) {
|
||||
f, err := os.Open(path)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "open %s", path)
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
switch filepath.Ext(path) {
|
||||
case ".gz":
|
||||
gr, err := gzip.NewReader(f)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "create gzip reader")
|
||||
}
|
||||
defer gr.Close()
|
||||
|
||||
bs, err := io.ReadAll(gr)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "read data")
|
||||
}
|
||||
return bs, nil
|
||||
case ".bz2":
|
||||
bs, err := io.ReadAll(bzip2.NewReader(f))
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "read data")
|
||||
}
|
||||
return bs, nil
|
||||
case ".xz":
|
||||
xr, err := xz.NewReader(f)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "create xz reader")
|
||||
}
|
||||
|
||||
bs, err := io.ReadAll(xr)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "read data")
|
||||
}
|
||||
return bs, nil
|
||||
default:
|
||||
bs, err := io.ReadAll(f)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "read data")
|
||||
}
|
||||
return bs, nil
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user