github.com/pdmccormick/importable-docker-buildx@v0.0.0-20240426161518-e47091289030/util/osutil/path_windows.go (about) 1 package osutil 2 3 import ( 4 "path/filepath" 5 6 "golang.org/x/sys/windows" 7 ) 8 9 // GetLongPathName converts Windows short pathnames to full pathnames. 10 // For example C:\Users\ADMIN~1 --> C:\Users\Administrator. 11 func GetLongPathName(path string) (string, error) { 12 // See https://groups.google.com/forum/#!topic/golang-dev/1tufzkruoTg 13 p, err := windows.UTF16FromString(path) 14 if err != nil { 15 return "", err 16 } 17 b := p // GetLongPathName says we can reuse buffer 18 n, err := windows.GetLongPathName(&p[0], &b[0], uint32(len(b))) 19 if err != nil { 20 return "", err 21 } 22 if n > uint32(len(b)) { 23 b = make([]uint16, n) 24 _, err = windows.GetLongPathName(&p[0], &b[0], uint32(len(b))) 25 if err != nil { 26 return "", err 27 } 28 } 29 return windows.UTF16ToString(b), nil 30 } 31 32 func SanitizePath(path string) string { 33 return filepath.ToSlash(filepath.Clean(path)) 34 }