Commit efacb2a1 authored by Brad Fitzpatrick's avatar Brad Fitzpatrick

os: remove Getenverror

Fixes #3065

R=golang-dev, dsymonds, rsc
CC=golang-dev
https://golang.org/cl/5675094
parent 83feedf7
...@@ -1451,7 +1451,14 @@ with more Go-like names, such as ...@@ -1451,7 +1451,14 @@ with more Go-like names, such as
<a href="/pkg/os/#ErrPermission"><code>ErrPermission</code></a> <a href="/pkg/os/#ErrPermission"><code>ErrPermission</code></a>
and and
<a href="/pkg/os/#ErrNoEnv"><code>ErrNoEnv</code></a>. <a href="/pkg/os/#ErrNoEnv"><code>ErrNoEnv</code></a>.
</p>
<p>
The <code>Getenverror</code> function has been removed. To distinguish
between a non-existent environment variable and an empty string,
use <a href="/pkg/os/#Environ"><code>os.Environ</code></a> or
<a href="/pkg/syscall/#Getenv"><code>syscall.Getenv</code></a>.
</p>
<p> <p>
<em>Updating</em>: <em>Updating</em>:
......
...@@ -1354,7 +1354,14 @@ with more Go-like names, such as ...@@ -1354,7 +1354,14 @@ with more Go-like names, such as
<a href="/pkg/os/#ErrPermission"><code>ErrPermission</code></a> <a href="/pkg/os/#ErrPermission"><code>ErrPermission</code></a>
and and
<a href="/pkg/os/#ErrNoEnv"><code>ErrNoEnv</code></a>. <a href="/pkg/os/#ErrNoEnv"><code>ErrNoEnv</code></a>.
</p>
<p>
The <code>Getenverror</code> function has been removed. To distinguish
between a non-existent environment variable and an empty string,
use <a href="/pkg/os/#Environ"><code>os.Environ</code></a> or
<a href="/pkg/syscall/#Getenv"><code>syscall.Getenv</code></a>.
</p>
<p> <p>
<em>Updating</em>: <em>Updating</em>:
......
...@@ -480,8 +480,7 @@ func (b *Builder) envv() []string { ...@@ -480,8 +480,7 @@ func (b *Builder) envv() []string {
"GOROOT_FINAL=/usr/local/go", "GOROOT_FINAL=/usr/local/go",
} }
for _, k := range extraEnv { for _, k := range extraEnv {
s, err := os.Getenverror(k) if s, ok := getenvOk(k); ok {
if err == nil {
e = append(e, k+"="+s) e = append(e, k+"="+s)
} }
} }
...@@ -497,8 +496,7 @@ func (b *Builder) envvWindows() []string { ...@@ -497,8 +496,7 @@ func (b *Builder) envvWindows() []string {
"GOBUILDEXIT": "1", // exit all.bat with completion status. "GOBUILDEXIT": "1", // exit all.bat with completion status.
} }
for _, name := range extraEnv { for _, name := range extraEnv {
s, err := os.Getenverror(name) if s, ok := getenvOk(name); ok {
if err == nil {
start[name] = s start[name] = s
} }
} }
...@@ -782,3 +780,17 @@ func defaultSuffix() string { ...@@ -782,3 +780,17 @@ func defaultSuffix() string {
} }
return ".bash" return ".bash"
} }
func getenvOk(k string) (v string, ok bool) {
v = os.Getenv(k)
if v != "" {
return v, true
}
keq := k + "="
for _, kv := range os.Environ() {
if kv == keq {
return "", true
}
}
return "", false
}
...@@ -6,10 +6,7 @@ ...@@ -6,10 +6,7 @@
package os package os
import ( import "syscall"
"errors"
"syscall"
)
// Expand replaces ${var} or $var in the string based on the mapping function. // Expand replaces ${var} or $var in the string based on the mapping function.
// Invocations of undefined variables are replaced with the empty string. // Invocations of undefined variables are replaced with the empty string.
...@@ -77,26 +74,10 @@ func getShellName(s string) (string, int) { ...@@ -77,26 +74,10 @@ func getShellName(s string) (string, int) {
return s[:i], i return s[:i], i
} }
// ENOENV is the error indicating that an environment variable does not exist.
var ENOENV = errors.New("no such environment variable")
// Getenverror retrieves the value of the environment variable named by the key.
// It returns the value and an error, if any.
func Getenverror(key string) (value string, err error) {
if len(key) == 0 {
return "", ErrInvalid
}
val, found := syscall.Getenv(key)
if !found {
return "", ENOENV
}
return val, nil
}
// Getenv retrieves the value of the environment variable named by the key. // Getenv retrieves the value of the environment variable named by the key.
// It returns the value, which will be empty if the variable is not present. // It returns the value, which will be empty if the variable is not present.
func Getenv(key string) string { func Getenv(key string) string {
v, _ := Getenverror(key) v, _ := syscall.Getenv(key)
return v return v
} }
......
...@@ -15,18 +15,14 @@ import ( ...@@ -15,18 +15,14 @@ import (
) )
func main() { func main() {
ga, e0 := os.Getenverror("GOARCH") ga := os.Getenv("GOARCH")
if e0 != nil {
print("$GOARCH: ", e0.Error(), "\n")
os.Exit(1)
}
if ga != runtime.GOARCH { if ga != runtime.GOARCH {
print("$GOARCH=", ga, "!= runtime.GOARCH=", runtime.GOARCH, "\n") print("$GOARCH=", ga, "!= runtime.GOARCH=", runtime.GOARCH, "\n")
os.Exit(1) os.Exit(1)
} }
xxx, e1 := os.Getenverror("DOES_NOT_EXIST") xxx := os.Getenv("DOES_NOT_EXIST")
if e1 != os.ENOENV { if xxx != "" {
print("$DOES_NOT_EXIST=", xxx, "; err = ", e1.Error(), "\n") print("$DOES_NOT_EXIST=", xxx, "\n")
os.Exit(1) os.Exit(1)
} }
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment