From 52a0a3f43171c79c11a7c024c757e9b084d2bbed Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Wed, 1 Oct 2014 11:17:15 -0700 Subject: os, syscall: add Unsetenv Also address a TODO, making Clearenv pass through to cgo. Based largely on Minux's earlier https://codereview.appspot.com/82040044 Fixes Issue 6423 LGTM=iant, alex.brainman, r, rsc R=rsc, iant, r, alex.brainman CC=golang-codereviews https://codereview.appspot.com/148370043 --- src/os/env.go | 5 +++++ src/os/env_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) (limited to 'src/os') diff --git a/src/os/env.go b/src/os/env.go index db7fc72b8..d0494a476 100644 --- a/src/os/env.go +++ b/src/os/env.go @@ -91,6 +91,11 @@ func Setenv(key, value string) error { return nil } +// Unsetenv unsets a single environment variable. +func Unsetenv(key string) error { + return syscall.Unsetenv(key) +} + // Clearenv deletes all environment variables. func Clearenv() { syscall.Clearenv() diff --git a/src/os/env_test.go b/src/os/env_test.go index 991fa4d05..e61806751 100644 --- a/src/os/env_test.go +++ b/src/os/env_test.go @@ -7,6 +7,7 @@ package os_test import ( . "os" "reflect" + "strings" "testing" ) @@ -68,3 +69,28 @@ func TestConsistentEnviron(t *testing.T) { } } } + +func TestUnsetenv(t *testing.T) { + const testKey = "GO_TEST_UNSETENV" + set := func() bool { + prefix := testKey + "=" + for _, key := range Environ() { + if strings.HasPrefix(key, prefix) { + return true + } + } + return false + } + if err := Setenv(testKey, "1"); err != nil { + t.Fatalf("Setenv: %v", err) + } + if !set() { + t.Error("Setenv didn't set TestUnsetenv") + } + if err := Unsetenv(testKey); err != nil { + t.Fatalf("Unsetenv: %v", err) + } + if set() { + t.Fatal("Unsetenv didn't clear TestUnsetenv") + } +} -- cgit v1.2.1