Commit f08352bd authored by Brad Fitzpatrick's avatar Brad Fitzpatrick

runtime: look up runtime env variables case insensitively on Windows

Fixes #28557

Change-Id: Ifca958b78e8c62fbc66515e693f528d799e8e84b
Reviewed-on: https://go-review.googlesource.com/c/147039Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
parent 85525c56
...@@ -14,13 +14,36 @@ func gogetenv(key string) string { ...@@ -14,13 +14,36 @@ func gogetenv(key string) string {
throw("getenv before env init") throw("getenv before env init")
} }
for _, s := range env { for _, s := range env {
if len(s) > len(key) && s[len(key)] == '=' && s[:len(key)] == key { if len(s) > len(key) && s[len(key)] == '=' && envKeyEqual(s[:len(key)], key) {
return s[len(key)+1:] return s[len(key)+1:]
} }
} }
return "" return ""
} }
// envKeyEqual reports whether a == b, with ASCII-only case insensitivity
// on Windows. The two strings must have the same length.
func envKeyEqual(a, b string) bool {
if GOOS == "windows" { // case insensitive
for i := 0; i < len(a); i++ {
ca, cb := a[i], b[i]
if ca == cb || lowerASCII(ca) == lowerASCII(cb) {
continue
}
return false
}
return true
}
return a == b
}
func lowerASCII(c byte) byte {
if 'A' <= c && c <= 'Z' {
return c + ('a' - 'A')
}
return c
}
var _cgo_setenv unsafe.Pointer // pointer to C function var _cgo_setenv unsafe.Pointer // pointer to C function
var _cgo_unsetenv unsafe.Pointer // pointer to C function var _cgo_unsetenv unsafe.Pointer // pointer to C function
......
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