10
func isHostWinPath(path string) bool {
11
return shouldResolveWinPaths() && strings.HasPrefix(path, `\\`) || hasWinDriveScheme(path, 0) || winPathExists(path)
14
func hasWinDriveScheme(path string, start int) bool {
15
if len(path) < start+2 || path[start+1] != ':' {
19
drive := rune(path[start])
20
return drive < unicode.MaxASCII && unicode.IsLetter(drive)
24
func ConvertWinMountPath(path string) (string, error) {
25
if !shouldResolveWinPaths() {
29
if strings.HasPrefix(path, "/") {
31
if len(path) > 2 && path[2] == '/' && shouldResolveUnixWinVariant(path) {
32
drive := unicode.ToLower(rune(path[1]))
33
if unicode.IsLetter(drive) && drive <= unicode.MaxASCII {
34
return fmt.Sprintf("/mnt/%c/%s", drive, path[3:]), nil
43
path = resolveRelativeOnWindows(path)
46
path = strings.TrimPrefix(path, `\\?\`)
50
case strings.HasPrefix(path, `\\.\`):
51
path = "/mnt/wsl/" + path[4:]
52
case len(path) > 1 && path[1] == ':':
53
path = "/mnt/" + strings.ToLower(path[0:1]) + path[2:]
55
return path, errors.New("unsupported UNC path")
58
return strings.ReplaceAll(path, `\`, "/"), nil