diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2022-01-20 09:33:30 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-20 09:33:30 -0500 |
commit | 206e57e5b012ae03315dfb84735d034dd9cfd26e (patch) | |
tree | 22652f96d82ed6fe106f6b8d71a92e6ea28e34c3 | |
parent | 1d6e154a73505cd0366cdeec7cc8582dd3ac2191 (diff) | |
parent | 4693fc6db14e00db7f1af0b02fad15da35fb3799 (diff) | |
download | podman-206e57e5b012ae03315dfb84735d034dd9cfd26e.tar.gz podman-206e57e5b012ae03315dfb84735d034dd9cfd26e.tar.bz2 podman-206e57e5b012ae03315dfb84735d034dd9cfd26e.zip |
Merge pull request #12928 from n1hility/win-env
Implement env parsing on Windows
-rw-r--r-- | pkg/env/env_unix.go (renamed from pkg/env/env_supported.go) | 2 | ||||
-rw-r--r-- | pkg/env/env_unsupported.go | 8 | ||||
-rw-r--r-- | pkg/env/env_windows.go | 25 |
3 files changed, 26 insertions, 9 deletions
diff --git a/pkg/env/env_supported.go b/pkg/env/env_unix.go index 8be9f9592..16061a700 100644 --- a/pkg/env/env_supported.go +++ b/pkg/env/env_unix.go @@ -1,4 +1,4 @@ -// +build linux darwin +// +build !windows package env diff --git a/pkg/env/env_unsupported.go b/pkg/env/env_unsupported.go deleted file mode 100644 index a71c2956d..000000000 --- a/pkg/env/env_unsupported.go +++ /dev/null @@ -1,8 +0,0 @@ -// +build !linux,!darwin - -package env - -func ParseSlice(s []string) (map[string]string, error) { - m := make(map[string]string) - return m, nil -} 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 +} |