Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2019-12-10 09:17:55 +0300
committerJunio C Hamano <gitster@pobox.com>2019-12-10 09:17:55 +0300
commit7034cd094bda4edbcdff7fad1a28fcaaf9b9a040 (patch)
treee0b837c5e5a2ea2fce3255ef59fd981e2bd30374 /compat/win32/path-utils.c
parent559c6fc317f92a0a3994f816d3513cd322745852 (diff)
parent53a06cf39b756eddfe4a2a34da93e3d04eb7b728 (diff)
Sync with Git 2.24.1
Diffstat (limited to 'compat/win32/path-utils.c')
-rw-r--r--compat/win32/path-utils.c24
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);