mirror of
https://github.com/shirou/gopsutil.git
synced 2025-04-29 13:49:21 +08:00
Merge pull request #1328 from shirou/feature/check-file-contents
fix(host,linux): Check if path exists and is nonempty before reading host files
This commit is contained in:
commit
ef5eaa83fe
@ -179,26 +179,26 @@ func PlatformInformationWithContext(ctx context.Context) (platform string, famil
|
|||||||
lsb = &lsbStruct{}
|
lsb = &lsbStruct{}
|
||||||
}
|
}
|
||||||
|
|
||||||
if common.PathExists(common.HostEtc("oracle-release")) {
|
if common.PathExistsWithContents(common.HostEtc("oracle-release")) {
|
||||||
platform = "oracle"
|
platform = "oracle"
|
||||||
contents, err := common.ReadLines(common.HostEtc("oracle-release"))
|
contents, err := common.ReadLines(common.HostEtc("oracle-release"))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
version = getRedhatishVersion(contents)
|
version = getRedhatishVersion(contents)
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if common.PathExists(common.HostEtc("enterprise-release")) {
|
} else if common.PathExistsWithContents(common.HostEtc("enterprise-release")) {
|
||||||
platform = "oracle"
|
platform = "oracle"
|
||||||
contents, err := common.ReadLines(common.HostEtc("enterprise-release"))
|
contents, err := common.ReadLines(common.HostEtc("enterprise-release"))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
version = getRedhatishVersion(contents)
|
version = getRedhatishVersion(contents)
|
||||||
}
|
}
|
||||||
} else if common.PathExists(common.HostEtc("slackware-version")) {
|
} else if common.PathExistsWithContents(common.HostEtc("slackware-version")) {
|
||||||
platform = "slackware"
|
platform = "slackware"
|
||||||
contents, err := common.ReadLines(common.HostEtc("slackware-version"))
|
contents, err := common.ReadLines(common.HostEtc("slackware-version"))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
version = getSlackwareVersion(contents)
|
version = getSlackwareVersion(contents)
|
||||||
}
|
}
|
||||||
} else if common.PathExists(common.HostEtc("debian_version")) {
|
} else if common.PathExistsWithContents(common.HostEtc("debian_version")) {
|
||||||
if lsb.ID == "Ubuntu" {
|
if lsb.ID == "Ubuntu" {
|
||||||
platform = "ubuntu"
|
platform = "ubuntu"
|
||||||
version = lsb.Release
|
version = lsb.Release
|
||||||
@ -206,7 +206,7 @@ func PlatformInformationWithContext(ctx context.Context) (platform string, famil
|
|||||||
platform = "linuxmint"
|
platform = "linuxmint"
|
||||||
version = lsb.Release
|
version = lsb.Release
|
||||||
} else {
|
} else {
|
||||||
if common.PathExists("/usr/bin/raspi-config") {
|
if common.PathExistsWithContents("/usr/bin/raspi-config") {
|
||||||
platform = "raspbian"
|
platform = "raspbian"
|
||||||
} else {
|
} else {
|
||||||
platform = "debian"
|
platform = "debian"
|
||||||
@ -279,6 +279,8 @@ func PlatformInformationWithContext(ctx context.Context) (platform string, famil
|
|||||||
version = lsb.Release
|
version = lsb.Release
|
||||||
}
|
}
|
||||||
|
|
||||||
|
platform = strings.Trim(platform, `"`)
|
||||||
|
|
||||||
switch platform {
|
switch platform {
|
||||||
case "debian", "ubuntu", "linuxmint", "raspbian":
|
case "debian", "ubuntu", "linuxmint", "raspbian":
|
||||||
family = "debian"
|
family = "debian"
|
||||||
|
@ -311,6 +311,15 @@ func PathExists(filename string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PathExistsWithContents returns the filename exists and it is not empty
|
||||||
|
func PathExistsWithContents(filename string) bool {
|
||||||
|
info, err := os.Stat(filename)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return info.Size() > 4 // at least 4 bytes
|
||||||
|
}
|
||||||
|
|
||||||
// GetEnv retrieves the environment variable key. If it does not exist it returns the default.
|
// GetEnv retrieves the environment variable key. If it does not exist it returns the default.
|
||||||
func GetEnv(key string, dfault string, combineWith ...string) string {
|
func GetEnv(key string, dfault string, combineWith ...string) string {
|
||||||
value := os.Getenv(key)
|
value := os.Getenv(key)
|
||||||
|
@ -102,6 +102,25 @@ func TestPathExists(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPathExistsWithContents(t *testing.T) {
|
||||||
|
if !PathExistsWithContents("common_test.go") {
|
||||||
|
t.Error("exists but return not exists")
|
||||||
|
}
|
||||||
|
if PathExistsWithContents("should_not_exists.go") {
|
||||||
|
t.Error("not exists but return exists")
|
||||||
|
}
|
||||||
|
|
||||||
|
f, err := os.CreateTemp("", "empty_test.txt")
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("CreateTemp failed, %s", err)
|
||||||
|
}
|
||||||
|
defer os.Remove(f.Name()) // clean up
|
||||||
|
|
||||||
|
if PathExistsWithContents(f.Name()) {
|
||||||
|
t.Error("exists but no content file return true")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestHostEtc(t *testing.T) {
|
func TestHostEtc(t *testing.T) {
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
t.Skip("windows doesn't have etc")
|
t.Skip("windows doesn't have etc")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user