12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- // Package longpath introduces some constants and helper functions for handling
- // long paths in Windows.
- //
- // Long paths are expected to be prepended with "\\?\" and followed by either a
- // drive letter, a UNC server\share, or a volume identifier.
- package longpath // import "github.com/docker/docker/pkg/longpath"
- import (
- "os"
- "runtime"
- "strings"
- )
- // Prefix is the longpath prefix for Windows file paths.
- const Prefix = `\\?\`
- // AddPrefix adds the Windows long path prefix to the path provided if
- // it does not already have it.
- func AddPrefix(path string) string {
- if !strings.HasPrefix(path, Prefix) {
- if strings.HasPrefix(path, `\\`) {
- // This is a UNC path, so we need to add 'UNC' to the path as well.
- path = Prefix + `UNC` + path[1:]
- } else {
- path = Prefix + path
- }
- }
- return path
- }
- // MkdirTemp is the equivalent of [os.MkdirTemp], except that on Windows
- // the result is in Windows longpath format. On Unix systems it is
- // equivalent to [os.MkdirTemp].
- func MkdirTemp(dir, prefix string) (string, error) {
- tempDir, err := os.MkdirTemp(dir, prefix)
- if err != nil {
- return "", err
- }
- if runtime.GOOS != "windows" {
- return tempDir, nil
- }
- return AddPrefix(tempDir), nil
- }
|