72 lines
1.7 KiB
Go
72 lines
1.7 KiB
Go
package pcidb
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"runtime"
|
|
|
|
homedir "github.com/mitchellh/go-homedir"
|
|
)
|
|
|
|
// Concrete merged set of configuration switches that get passed to pcidb
|
|
// internal functions
|
|
type context struct {
|
|
chroot string
|
|
cacheOnly bool
|
|
cachePath string
|
|
disableNetworkFetch bool
|
|
searchPaths []string
|
|
}
|
|
|
|
func contextFromOptions(merged *WithOption) *context {
|
|
ctx := &context{
|
|
chroot: *merged.Chroot,
|
|
cacheOnly: *merged.CacheOnly,
|
|
cachePath: getCachePath(),
|
|
disableNetworkFetch: *merged.DisableNetworkFetch,
|
|
searchPaths: make([]string, 0),
|
|
}
|
|
ctx.setSearchPaths()
|
|
return ctx
|
|
}
|
|
|
|
func getCachePath() string {
|
|
hdir, err := homedir.Dir()
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "Failed getting homedir.Dir(): %v", err)
|
|
return ""
|
|
}
|
|
fp, err := homedir.Expand(filepath.Join(hdir, ".cache", "pci.ids"))
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "Failed expanding local cache path: %v", err)
|
|
return ""
|
|
}
|
|
return fp
|
|
}
|
|
|
|
// Depending on the operating system, sets the context's searchPaths to a set
|
|
// of local filepaths to search for a pci.ids database file
|
|
func (ctx *context) setSearchPaths() {
|
|
// A set of filepaths we will first try to search for the pci-ids DB file
|
|
// on the local machine. If we fail to find one, we'll try pulling the
|
|
// latest pci-ids file from the network
|
|
ctx.searchPaths = append(ctx.searchPaths, ctx.cachePath)
|
|
if ctx.cacheOnly {
|
|
return
|
|
}
|
|
|
|
rootPath := ctx.chroot
|
|
|
|
if runtime.GOOS != "windows" {
|
|
ctx.searchPaths = append(
|
|
ctx.searchPaths,
|
|
filepath.Join(rootPath, "usr", "share", "hwdata", "pci.ids"),
|
|
)
|
|
ctx.searchPaths = append(
|
|
ctx.searchPaths,
|
|
filepath.Join(rootPath, "usr", "share", "misc", "pci.ids"),
|
|
)
|
|
}
|
|
}
|