package cmdimport ( "os" "strings" "sync")struct envSet { vars map[string]string sync.Mutex}// Initialize a new env from the osfunc osenv() map[string]string { env := map[string]string{} for _, s := range os.Environ() { toks := strings.SplitN(s, "=", 2) if len(toks) == 2 { env[toks[0]] = toks[1] } } return env}func (e *envSet) set(n, v string) { e.Lock() defer e.Unlock() if v == "" { delete(e.vars, n) } else { e.vars[n] = v } os.Setenv(n, v) // in case someone execs...}func (e *envSet) get(n string) string { e.Lock() defer e.Unlock() return e.vars[n]}func mkEnv() *envSet { ne := &envSet{ vars: map[string]string{}, } for k, v := range osenv() { ne.vars[k] = v } return ne}func (e *envSet) dup() *envSet { e.Lock() defer e.Unlock() ne := &envSet{ vars: map[string]string{}, } for k, v := range e.vars { ne.vars[k] = v } return ne}
package cmd
import (
"os"
"strings"
"sync"
)
struct envSet {
vars map[string]string
sync.Mutex
}
// Initialize a new env from the os
func osenv() map[string]string {
env := map[string]string{}
for _, s := range os.Environ() {
toks := strings.SplitN(s, "=", 2)
if len(toks) == 2 {
env[toks[0]] = toks[1]
}
}
return env
}
func (e *envSet) set(n, v string) {
e.Lock()
defer e.Unlock()
if v == "" {
delete(e.vars, n)
} else {
e.vars[n] = v
}
os.Setenv(n, v) // in case someone execs...
}
func (e *envSet) get(n string) string {
e.Lock()
defer e.Unlock()
return e.vars[n]
}
func mkEnv() *envSet {
ne := &envSet{
vars: map[string]string{},
}
for k, v := range osenv() {
ne.vars[k] = v
}
return ne
}
func (e *envSet) dup() *envSet {
e.Lock()
defer e.Unlock()
ne := &envSet{
vars: map[string]string{},
}
for k, v := range e.vars {
ne.vars[k] = v
}
return ne
}