1// Copyright 2012 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5// +build aix darwin dragonfly freebsd hurd js,wasm linux netbsd openbsd solaris windows 6 7package runtime 8 9func gogetenv(key string) string { 10 env := environ() 11 if env == nil { 12 throw("getenv before env init") 13 } 14 for _, s := range env { 15 if len(s) > len(key) && s[len(key)] == '=' && envKeyEqual(s[:len(key)], key) { 16 return s[len(key)+1:] 17 } 18 } 19 return "" 20} 21 22// envKeyEqual reports whether a == b, with ASCII-only case insensitivity 23// on Windows. The two strings must have the same length. 24func envKeyEqual(a, b string) bool { 25 if GOOS == "windows" { // case insensitive 26 for i := 0; i < len(a); i++ { 27 ca, cb := a[i], b[i] 28 if ca == cb || lowerASCII(ca) == lowerASCII(cb) { 29 continue 30 } 31 return false 32 } 33 return true 34 } 35 return a == b 36} 37 38func lowerASCII(c byte) byte { 39 if 'A' <= c && c <= 'Z' { 40 return c + ('a' - 'A') 41 } 42 return c 43} 44