env_windows.go (1226B)
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 "unsafe" 12 ) 13 14 func Getenv(key string) (value string, found bool) { 15 return syscall.Getenv(key) 16 } 17 18 func Setenv(key, value string) error { 19 return syscall.Setenv(key, value) 20 } 21 22 func Clearenv() { 23 syscall.Clearenv() 24 } 25 26 func Environ() []string { 27 return syscall.Environ() 28 } 29 30 // Returns a default environment associated with the token, rather than the current 31 // process. If inheritExisting is true, then this environment also inherits the 32 // environment of the current process. 33 func (token Token) Environ(inheritExisting bool) (env []string, err error) { 34 var block *uint16 35 err = CreateEnvironmentBlock(&block, token, inheritExisting) 36 if err != nil { 37 return nil, err 38 } 39 defer DestroyEnvironmentBlock(block) 40 blockp := unsafe.Pointer(block) 41 for { 42 entry := UTF16PtrToString((*uint16)(blockp)) 43 if len(entry) == 0 { 44 break 45 } 46 env = append(env, entry) 47 blockp = unsafe.Add(blockp, 2*(len(entry)+1)) 48 } 49 return env, nil 50 } 51 52 func Unsetenv(key string) error { 53 return syscall.Unsetenv(key) 54 }