Remove SetEnv on all platforms

pull/417/head
Michael Schurter 8 years ago
parent 565f5c8c5e
commit 042305ee4a

@ -358,3 +358,19 @@ func Pipeline(cmds ...*exec.Cmd) ([]byte, []byte, error) {
// Return the pipeline output and the collected standard error // Return the pipeline output and the collected standard error
return output.Bytes(), stderr.Bytes(), nil return output.Bytes(), stderr.Bytes(), nil
} }
// getSysctrlEnv sets LC_ALL=C in a list of env vars for use when running
// sysctl commands (see DoSysctrl).
func getSysctrlEnv(env []string) []string {
foundLC := false
for i, line := range env {
if strings.HasPrefix(line, "LC_ALL") {
env[i] = "LC_ALL=C"
foundLC = true
}
}
if !foundLC {
env = append(env, "LC_ALL=C")
}
return env
}

@ -12,16 +12,13 @@ import (
) )
func DoSysctrl(mib string) ([]string, error) { func DoSysctrl(mib string) ([]string, error) {
err := os.Setenv("LC_ALL", "C")
if err != nil {
return []string{}, err
}
sysctl, err := exec.LookPath("/usr/sbin/sysctl") sysctl, err := exec.LookPath("/usr/sbin/sysctl")
if err != nil { if err != nil {
return []string{}, err return []string{}, err
} }
out, err := exec.Command(sysctl, "-n", mib).Output() cmd := exec.Command(sysctl, "-n", mib)
cmd.Env = getSysctrlEnv(os.Environ())
out, err := cmd.Output()
if err != nil { if err != nil {
return []string{}, err return []string{}, err
} }

@ -12,15 +12,13 @@ import (
) )
func DoSysctrl(mib string) ([]string, error) { func DoSysctrl(mib string) ([]string, error) {
err := os.Setenv("LC_ALL", "C")
if err != nil {
return []string{}, err
}
sysctl, err := exec.LookPath("/sbin/sysctl") sysctl, err := exec.LookPath("/sbin/sysctl")
if err != nil { if err != nil {
return []string{}, err return []string{}, err
} }
out, err := exec.Command(sysctl, "-n", mib).Output() cmd := exec.Command(sysctl, "-n", mib)
cmd.Env = getSysctrlEnv(os.Environ())
out, err := cmd.Output()
if err != nil { if err != nil {
return []string{}, err return []string{}, err
} }

@ -9,23 +9,12 @@ import (
) )
func DoSysctrl(mib string) ([]string, error) { func DoSysctrl(mib string) ([]string, error) {
hostEnv := os.Environ()
foundLC := false
for i, line := range hostEnv {
if strings.HasPrefix(line, "LC_ALL") {
hostEnv[i] = "LC_ALL=C"
foundLC = true
}
}
if !foundLC {
hostEnv = append(hostEnv, "LC_ALL=C")
}
sysctl, err := exec.LookPath("/sbin/sysctl") sysctl, err := exec.LookPath("/sbin/sysctl")
if err != nil { if err != nil {
return []string{}, err return []string{}, err
} }
cmd := exec.Command(sysctl, "-n", mib) cmd := exec.Command(sysctl, "-n", mib)
cmd.Env = hostEnv cmd.Env = getSysctrlEnv(os.Environ())
out, err := cmd.Output() out, err := cmd.Output()
if err != nil { if err != nil {
return []string{}, err return []string{}, err

@ -12,15 +12,13 @@ import (
) )
func DoSysctrl(mib string) ([]string, error) { func DoSysctrl(mib string) ([]string, error) {
err := os.Setenv("LC_ALL", "C")
if err != nil {
return []string{}, err
}
sysctl, err := exec.LookPath("/sbin/sysctl") sysctl, err := exec.LookPath("/sbin/sysctl")
if err != nil { if err != nil {
return []string{}, err return []string{}, err
} }
out, err := exec.Command(sysctl, "-n", mib).Output() cmd := exec.Command(sysctl, "-n", mib)
cmd.Env = getSysctrlEnv(os.Environ())
out, err := cmd.Output()
if err != nil { if err != nil {
return []string{}, err return []string{}, err
} }

@ -2,6 +2,8 @@ package common
import ( import (
"fmt" "fmt"
"os"
"reflect"
"strings" "strings"
"testing" "testing"
) )
@ -95,3 +97,33 @@ func TestHostEtc(t *testing.T) {
t.Errorf("invalid HostEtc, %s", p) t.Errorf("invalid HostEtc, %s", p)
} }
} }
func TestGetSysctrlEnv(t *testing.T) {
// Append case
env := getSysctrlEnv([]string{"FOO=bar"})
if !reflect.DeepEqual(env, []string{"FOO=bar", "LC_ALL=C"}) {
t.Errorf("unexpected append result from getSysctrlEnv: %q", env)
}
// Replace case
env = getSysctrlEnv([]string{"FOO=bar", "LC_ALL=en_US.UTF-8"})
if !reflect.DeepEqual(env, []string{"FOO=bar", "LC_ALL=C"}) {
t.Errorf("unexpected replace result from getSysctrlEnv: %q", env)
}
// Test against real env
env = getSysctrlEnv(os.Environ())
found := false
for _, v := range env {
if v == "LC_ALL=C" {
found = true
continue
}
if strings.HasPrefix(v, "LC_ALL") {
t.Fatalf("unexpected LC_ALL value: %q", v)
}
}
if !found {
t.Errorf("unexpected real result from getSysctrlEnv: %q", env)
}
}

Loading…
Cancel
Save