Source File
env_list.go
Belonging Package
src.elv.sh/pkg/eval/vars
package varsimport ()var (pathListSeparator = string(os.PathListSeparator)forbiddenInPath = pathListSeparator + "\x00")// Errorsvar (ErrPathMustBeString = errors.New("path must be string")ErrPathCannotContainColonZero = errors.New(`path cannot contain colon or \0`))// NewEnvListVar returns a variable whose value is a list synchronized with an// environment variable with the elements joined by os.PathListSeparator.//// Elements in the value of the variable must be strings, and cannot contain// os.PathListSeparator or \0; attempting to put any in its elements will result in// an error.func ( string) Var {return &envListVar{envName: }}type envListVar struct {sync.RWMutexenvName stringcacheFor stringcacheValue interface{}}// Get returns a Value for an EnvPathList.func ( *envListVar) () interface{} {.Lock()defer .Unlock():= os.Getenv(.envName)if == .cacheFor {return .cacheValue}.cacheFor =:= vector.Emptyfor , := range strings.Split(, pathListSeparator) {= .Cons()}.cacheValue =return .cacheValue}// Set sets an EnvPathList. The underlying environment variable is set.func ( *envListVar) ( interface{}) error {var ([]stringerror):= vals.Iterate(, func( interface{}) bool {, := .(string)if ! {= ErrPathMustBeStringreturn false}:=if strings.ContainsAny(, forbiddenInPath) {= ErrPathCannotContainColonZeroreturn false}= append(, )return true})if != nil || != nil {return diag.Errors(, )}.Lock()defer .Unlock()os.Setenv(.envName, strings.Join(, pathListSeparator))return nil}
The pages are generated with Golds v0.2.8-preview. (GOOS=darwin GOARCH=arm64)