aboutsummaryrefslogtreecommitdiff
path: root/pkg/env/env_windows.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/env/env_windows.go')
-rw-r--r--pkg/env/env_windows.go25
1 files changed, 25 insertions, 0 deletions
diff --git a/pkg/env/env_windows.go b/pkg/env/env_windows.go
new file mode 100644
index 000000000..5df08fadc
--- /dev/null
+++ b/pkg/env/env_windows.go
@@ -0,0 +1,25 @@
+package env
+
+// ParseSlice parses the specified slice and transforms it into an environment
+// map.
+func ParseSlice(s []string) (map[string]string, error) {
+ env := make(map[string]string, len(s))
+ for _, e := range s {
+ if len(e) > 0 && e[0] == '=' {
+ // The legacy Windows CMD command interpreter uses a hack, where to emulate
+ // DOS semantics, it uses an illegal (by windows definition) env name for
+ // state storage to avoid conlficting with user defined env names. This is
+ // used to preserve drive letter paths. E.g., typing c: from another drive
+ // will remember the last CWD because CMD stores it in an env named "=C:".
+ // Since these are illegal, they are filtered from standard user access but
+ // are still available in the underlying win32 API calls. Since they have
+ // zero value to a container, we filter as well.
+ continue
+ }
+
+ if err := parseEnv(env, e); err != nil {
+ return nil, err
+ }
+ }
+ return env, nil
+}