podman

Форк
0
/
winpath.go 
59 строк · 1.6 Кб
1
package specgen
2

3
import (
4
	"errors"
5
	"fmt"
6
	"strings"
7
	"unicode"
8
)
9

10
func isHostWinPath(path string) bool {
11
	return shouldResolveWinPaths() && strings.HasPrefix(path, `\\`) || hasWinDriveScheme(path, 0) || winPathExists(path)
12
}
13

14
func hasWinDriveScheme(path string, start int) bool {
15
	if len(path) < start+2 || path[start+1] != ':' {
16
		return false
17
	}
18

19
	drive := rune(path[start])
20
	return drive < unicode.MaxASCII && unicode.IsLetter(drive)
21
}
22

23
// Converts a Windows path to a WSL guest path if local env is a WSL linux guest or this is a Windows client.
24
func ConvertWinMountPath(path string) (string, error) {
25
	if !shouldResolveWinPaths() {
26
		return path, nil
27
	}
28

29
	if strings.HasPrefix(path, "/") {
30
		// Handle /[driveletter]/windows/path form (e.g. c:\Users\bar == /c/Users/bar)
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
35
			}
36
		}
37

38
		// unix path - pass through
39
		return path, nil
40
	}
41

42
	// Convert remote win client relative paths to absolute
43
	path = resolveRelativeOnWindows(path)
44

45
	// Strip extended marker prefix if present
46
	path = strings.TrimPrefix(path, `\\?\`)
47

48
	// Drive installed via wsl --mount
49
	switch {
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:]
54
	default:
55
		return path, errors.New("unsupported UNC path")
56
	}
57

58
	return strings.ReplaceAll(path, `\`, "/"), nil
59
}
60

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.