12345678910111213141516171819202122232425262728293031323334353637 |
- // +build windows
- package system
- import (
- "fmt"
- "path/filepath"
- "strings"
- )
- // DefaultPathEnv is deliberately empty on Windows as the default path will be set by
- // the container. Docker has no context of what the default path should be.
- const DefaultPathEnv = ""
- // CheckSystemDriveAndRemoveDriveLetter verifies and manipulates a Windows path.
- // This is used, for example, when validating a user provided path in docker cp.
- // If a drive letter is supplied, it must be the system drive. The drive letter
- // is always removed. Also, it translates it to OS semantics (IOW / to \). We
- // need the path in this syntax so that it can ultimately be contatenated with
- // a Windows long-path which doesn't support drive-letters. Examples:
- // C: --> Fail
- // C:\ --> \
- // a --> a
- // /a --> \a
- // d:\ --> Fail
- func CheckSystemDriveAndRemoveDriveLetter(path string) (string, error) {
- if len(path) == 2 && string(path[1]) == ":" {
- return "", fmt.Errorf("No relative path specified in %q", path)
- }
- if !filepath.IsAbs(path) || len(path) < 2 {
- return filepath.FromSlash(path), nil
- }
- if string(path[1]) == ":" && !strings.EqualFold(string(path[0]), "c") {
- return "", fmt.Errorf("The specified path is not on the system drive (C:)")
- }
- return filepath.FromSlash(path[2:]), nil
- }
|