packer-cn/vendor/github.com/gophercloud/utils/env/env_windows.go

107 lines
2.2 KiB
Go
Raw Normal View History

2020-07-13 12:01:37 -04:00
package env
import (
"os"
"syscall"
"golang.org/x/sys/windows"
"golang.org/x/text/encoding/charmap"
)
func Getenv(s string) string {
var st uint32
env := os.Getenv(s)
if windows.GetConsoleMode(windows.Handle(syscall.Stdin), &st) == nil ||
windows.GetConsoleMode(windows.Handle(syscall.Stdout), &st) == nil ||
windows.GetConsoleMode(windows.Handle(syscall.Stderr), &st) == nil {
// detect windows console, should be skipped in cygwin environment
var cm charmap.Charmap
switch windows.GetACP() {
case 37:
cm = *charmap.CodePage037
case 1047:
cm = *charmap.CodePage1047
case 1140:
cm = *charmap.CodePage1140
case 437:
cm = *charmap.CodePage437
case 850:
cm = *charmap.CodePage850
case 852:
cm = *charmap.CodePage852
case 855:
cm = *charmap.CodePage855
case 858:
cm = *charmap.CodePage858
case 860:
cm = *charmap.CodePage860
case 862:
cm = *charmap.CodePage862
case 863:
cm = *charmap.CodePage863
case 865:
cm = *charmap.CodePage865
case 866:
cm = *charmap.CodePage866
case 28591:
cm = *charmap.ISO8859_1
case 28592:
cm = *charmap.ISO8859_2
case 28593:
cm = *charmap.ISO8859_3
case 28594:
cm = *charmap.ISO8859_4
case 28595:
cm = *charmap.ISO8859_5
case 28596:
cm = *charmap.ISO8859_6
case 28597:
cm = *charmap.ISO8859_7
case 28598:
cm = *charmap.ISO8859_8
case 28599:
cm = *charmap.ISO8859_9
case 28600:
cm = *charmap.ISO8859_10
case 28603:
cm = *charmap.ISO8859_13
case 28604:
cm = *charmap.ISO8859_14
case 28605:
cm = *charmap.ISO8859_15
case 28606:
cm = *charmap.ISO8859_16
case 20866:
cm = *charmap.KOI8R
case 21866:
cm = *charmap.KOI8U
case 1250:
cm = *charmap.Windows1250
case 1251:
cm = *charmap.Windows1251
case 1252:
cm = *charmap.Windows1252
case 1253:
cm = *charmap.Windows1253
case 1254:
cm = *charmap.Windows1254
case 1255:
cm = *charmap.Windows1255
case 1256:
cm = *charmap.Windows1256
case 1257:
cm = *charmap.Windows1257
case 1258:
cm = *charmap.Windows1258
case 874:
cm = *charmap.Windows874
default:
return env
}
if v, err := cm.NewEncoder().String(env); err == nil {
return v
}
}
return env
}