package syscall
import (
)
var (
envOnce sync.Once
envLock sync.RWMutex
env map[string]int
envs []string = runtime_envs()
)
func () []string
func () {
env = make(map[string]int)
for , := range envs {
for := 0; < len(); ++ {
if [] == '=' {
:= [:]
if , := env[]; ! {
env[] =
} else {
envs[] = ""
}
break
}
}
}
}
func ( string) error {
envOnce.Do(copyenv)
envLock.Lock()
defer envLock.Unlock()
if , := env[]; {
envs[] = ""
delete(env, )
}
runtimeUnsetenv()
return nil
}
func ( string) ( string, bool) {
envOnce.Do(copyenv)
if len() == 0 {
return "", false
}
envLock.RLock()
defer envLock.RUnlock()
, := env[]
if ! {
return "", false
}
:= envs[]
for := 0; < len(); ++ {
if [] == '=' {
return [+1:], true
}
}
return "", false
}
func (, string) error {
envOnce.Do(copyenv)
if len() == 0 {
return EINVAL
}
for := 0; < len(); ++ {
if [] == '=' || [] == 0 {
return EINVAL
}
}
if runtime.GOOS != "plan9" {
for := 0; < len(); ++ {
if [] == 0 {
return EINVAL
}
}
}
envLock.Lock()
defer envLock.Unlock()
, := env[]
:= + "=" +
if {
envs[] =
} else {
= len(envs)
envs = append(envs, )
}
env[] =
runtimeSetenv(, )
return nil
}
func () {
envOnce.Do(copyenv)
envLock.Lock()
defer envLock.Unlock()
for := range env {
runtimeUnsetenv()
}
env = make(map[string]int)
envs = []string{}
}
func () []string {
envOnce.Do(copyenv)
envLock.RLock()
defer envLock.RUnlock()
:= make([]string, 0, len(envs))
for , := range envs {
if != "" {
= append(, )
}
}
return
}