github.com/binkynet/BinkyNet@v1.12.1-0.20240421190447-da4e34c20be0/proto_vendor/golang.org/x/sys/windows/env_windows.go (about) 1 // Copyright 2010 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 // Windows environment variables. 6 7 package windows 8 9 import ( 10 "syscall" 11 "unicode/utf16" 12 "unsafe" 13 ) 14 15 func Getenv(key string) (value string, found bool) { 16 return syscall.Getenv(key) 17 } 18 19 func Setenv(key, value string) error { 20 return syscall.Setenv(key, value) 21 } 22 23 func Clearenv() { 24 syscall.Clearenv() 25 } 26 27 func Environ() []string { 28 return syscall.Environ() 29 } 30 31 // Returns a default environment associated with the token, rather than the current 32 // process. If inheritExisting is true, then this environment also inherits the 33 // environment of the current process. 34 func (token Token) Environ(inheritExisting bool) (env []string, err error) { 35 var block *uint16 36 err = CreateEnvironmentBlock(&block, token, inheritExisting) 37 if err != nil { 38 return nil, err 39 } 40 defer DestroyEnvironmentBlock(block) 41 blockp := uintptr(unsafe.Pointer(block)) 42 for { 43 entry := (*[(1 << 30) - 1]uint16)(unsafe.Pointer(blockp))[:] 44 for i, v := range entry { 45 if v == 0 { 46 entry = entry[:i] 47 break 48 } 49 } 50 if len(entry) == 0 { 51 break 52 } 53 env = append(env, string(utf16.Decode(entry))) 54 blockp += 2 * (uintptr(len(entry)) + 1) 55 } 56 return env, nil 57 } 58 59 func Unsetenv(key string) error { 60 return syscall.Unsetenv(key) 61 }