mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
lib/template updated to use new setup; its clients also updated. Step 2 will make os's error support internally much cleaner. R=rsc OCL=27586 CL=27586
80 lines
1.6 KiB
Go
80 lines
1.6 KiB
Go
// Copyright 2009 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Environment variables.
|
|
|
|
package os
|
|
|
|
import (
|
|
"once";
|
|
"os";
|
|
)
|
|
|
|
// ENOENV is the Error indicating that an environment variable does not exist.
|
|
var ENOENV = NewError("no such environment variable");
|
|
|
|
var env map[string] string;
|
|
|
|
|
|
func copyenv() {
|
|
env = make(map[string] string);
|
|
for i, s := range sys.Envs {
|
|
for j := 0; j < len(s); j++ {
|
|
if s[j] == '=' {
|
|
env[s[0:j]] = s[j+1:len(s)];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Getenv retrieves the value of the environment variable named by the key.
|
|
// It returns the value and an error, if any.
|
|
func Getenv(key string) (value string, err Error) {
|
|
once.Do(copyenv);
|
|
|
|
if len(key) == 0 {
|
|
return "", EINVAL;
|
|
}
|
|
v, ok := env[key];
|
|
if !ok {
|
|
return "", ENOENV;
|
|
}
|
|
return v, nil;
|
|
}
|
|
|
|
// Setenv sets the value of the environment variable named by the key.
|
|
// It returns an Error, if any.
|
|
func Setenv(key, value string) Error {
|
|
once.Do(copyenv);
|
|
|
|
if len(key) == 0 {
|
|
return EINVAL;
|
|
}
|
|
env[key] = value;
|
|
return nil;
|
|
}
|
|
|
|
// Clearenv deletes all environment variables.
|
|
func Clearenv() {
|
|
once.Do(copyenv); // prevent copyenv in Getenv/Setenv
|
|
env = make(map[string] string);
|
|
}
|
|
|
|
// Environ returns an array of strings representing the environment,
|
|
// in the form "key=value".
|
|
func Environ() []string {
|
|
once.Do(copyenv);
|
|
a := make([]string, len(env));
|
|
i := 0;
|
|
for k, v := range(env) {
|
|
// check i < len(a) for safety,
|
|
// in case env is changing underfoot.
|
|
if i < len(a) {
|
|
a[i] = k + "=" + v;
|
|
i++;
|
|
}
|
|
}
|
|
return a[0:i];
|
|
}
|