diff options
author | Junio C Hamano <gitster@pobox.com> | 2019-12-10 09:17:55 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-12-10 09:17:55 +0300 |
commit | 7034cd094bda4edbcdff7fad1a28fcaaf9b9a040 (patch) | |
tree | e0b837c5e5a2ea2fce3255ef59fd981e2bd30374 /compat/win32/path-utils.c | |
parent | 559c6fc317f92a0a3994f816d3513cd322745852 (diff) | |
parent | 53a06cf39b756eddfe4a2a34da93e3d04eb7b728 (diff) |
Sync with Git 2.24.1
Diffstat (limited to 'compat/win32/path-utils.c')
-rw-r--r-- | compat/win32/path-utils.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/compat/win32/path-utils.c b/compat/win32/path-utils.c index d9d3641de85..ebf2f12eb66 100644 --- a/compat/win32/path-utils.c +++ b/compat/win32/path-utils.c @@ -1,5 +1,29 @@ #include "../../git-compat-util.h" +int win32_has_dos_drive_prefix(const char *path) +{ + int i; + + /* + * Does it start with an ASCII letter (i.e. highest bit not set), + * followed by a colon? + */ + if (!(0x80 & (unsigned char)*path)) + return *path && path[1] == ':' ? 2 : 0; + + /* + * While drive letters must be letters of the English alphabet, it is + * possible to assign virtually _any_ Unicode character via `subst` as + * a drive letter to "virtual drives". Even `1`, or `ä`. Or fun stuff + * like this: + * + * subst ֍: %USERPROFILE%\Desktop + */ + for (i = 1; i < 4 && (0x80 & (unsigned char)path[i]); i++) + ; /* skip first UTF-8 character */ + return path[i] == ':' ? i + 1 : 0; +} + int win32_skip_dos_drive_prefix(char **path) { int ret = has_dos_drive_prefix(*path); |