os: implement and smoketest os.Clearenv

Этот коммит содержится в:
Dan Kegel 2021-12-11 11:53:02 -08:00 коммит произвёл Ron Evans
родитель e4f2b9c003
коммит 51fc78c100
4 изменённых файлов: 49 добавлений и 0 удалений

Просмотреть файл

@ -25,6 +25,11 @@ func Unsetenv(key string) error {
return nil
}
// Clearenv deletes all environment variables.
func Clearenv() {
syscall.Clearenv()
}
func LookupEnv(key string) (string, bool) {
return syscall.Getenv(key)
}

Просмотреть файл

@ -46,6 +46,34 @@ func TestUnsetenv(t *testing.T) {
}
}
func TestClearenv(t *testing.T) {
const testKey = "GO_TEST_CLEARENV"
const testValue = "1"
// reset env
defer func(origEnv []string) {
for _, pair := range origEnv {
// Environment variables on Windows can begin with =
// https://blogs.msdn.com/b/oldnewthing/archive/2010/05/06/10008132.aspx
i := strings.Index(pair[1:], "=") + 1
if err := Setenv(pair[:i], pair[i+1:]); err != nil {
t.Errorf("Setenv(%q, %q) failed during reset: %v", pair[:i], pair[i+1:], err)
}
}
}(Environ())
if err := Setenv(testKey, testValue); err != nil {
t.Fatalf("Setenv(%q, %q) failed: %v", testKey, testValue, err)
}
if _, ok := LookupEnv(testKey); !ok {
t.Errorf("Setenv(%q, %q) didn't set $%s", testKey, testValue, testKey)
}
Clearenv()
if val, ok := LookupEnv(testKey); ok {
t.Errorf("Clearenv() didn't clear $%s, remained with value %q", testKey, val)
}
}
func TestLookupEnv(t *testing.T) {
const smallpox = "SMALLPOX" // No one has smallpox.
value, ok := LookupEnv(smallpox) // Should not exist.

Просмотреть файл

@ -151,6 +151,17 @@ func Unsetenv(key string) (err error) {
return
}
func Clearenv() {
for _, s := range Environ() {
for j := 0; j < len(s); j++ {
if s[j] == '=' {
Unsetenv(s[0:j])
break
}
}
}
}
func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {
addr := libc_mmap(nil, uintptr(length), int32(prot), int32(flags), int32(fd), uintptr(offset))
if addr == unsafe.Pointer(^uintptr(0)) {

Просмотреть файл

@ -77,6 +77,11 @@ func Unsetenv(key string) (err error) {
return ENOSYS
}
func Clearenv() (err error) {
// stub for now
return ENOSYS
}
func Environ() []string {
env := runtime_envs()
envCopy := make([]string, len(env))