Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
kardolus
GitHub Repository: kardolus/chatgpt-cli
Path: blob/main/vendor/golang.org/x/sys/windows/env_windows.go
2880 views
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
size := unsafe.Sizeof(*block)
41
for *block != 0 {
42
// find NUL terminator
43
end := unsafe.Pointer(block)
44
for *(*uint16)(end) != 0 {
45
end = unsafe.Add(end, size)
46
}
47
48
entry := unsafe.Slice(block, (uintptr(end)-uintptr(unsafe.Pointer(block)))/size)
49
env = append(env, UTF16ToString(entry))
50
block = (*uint16)(unsafe.Add(end, size))
51
}
52
return env, nil
53
}
54
55
func Unsetenv(key string) error {
56
return syscall.Unsetenv(key)
57
}
58
59