123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- // Copyright 2010 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- // Windows environment variables.
- package windows
- import (
- "syscall"
- "unsafe"
- )
- func Getenv(key string) (value string, found bool) {
- return syscall.Getenv(key)
- }
- func Setenv(key, value string) error {
- return syscall.Setenv(key, value)
- }
- func Clearenv() {
- syscall.Clearenv()
- }
- func Environ() []string {
- return syscall.Environ()
- }
- // Returns a default environment associated with the token, rather than the current
- // process. If inheritExisting is true, then this environment also inherits the
- // environment of the current process.
- func (token Token) Environ(inheritExisting bool) (env []string, err error) {
- var block *uint16
- err = CreateEnvironmentBlock(&block, token, inheritExisting)
- if err != nil {
- return nil, err
- }
- defer DestroyEnvironmentBlock(block)
- size := unsafe.Sizeof(*block)
- for *block != 0 {
- // find NUL terminator
- end := unsafe.Pointer(block)
- for *(*uint16)(end) != 0 {
- end = unsafe.Add(end, size)
- }
- entry := unsafe.Slice(block, (uintptr(end)-uintptr(unsafe.Pointer(block)))/size)
- env = append(env, UTF16ToString(entry))
- block = (*uint16)(unsafe.Add(end, size))
- }
- return env, nil
- }
- func Unsetenv(key string) error {
- return syscall.Unsetenv(key)
- }
|