aboutsummaryrefslogtreecommitdiffstats
path: root/compat/win32/path-utils.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2019-01-14 15:29:32 -0800
committerJunio C Hamano <gitster@pobox.com>2019-01-14 15:29:32 -0800
commit25d90d1cb72ce51407324259516843406142fe89 (patch)
tree459b0885da10de9eddeed12f49cc9ebd10f0fac8 /compat/win32/path-utils.c
parentd95f610c64b9b33957beaa1da60a489d0b4aa7fc (diff)
parent1cadad6f658bfb3ab54b25dd04bac372253473b6 (diff)
downloadgit-25d90d1cb72ce51407324259516843406142fe89.tar.gz
Merge branch 'tb/use-common-win32-pathfuncs-on-cygwin'
Cygwin update. * tb/use-common-win32-pathfuncs-on-cygwin: git clone <url> C:\cygwin\home\USER\repo' is working (again)
Diffstat (limited to 'compat/win32/path-utils.c')
-rw-r--r--compat/win32/path-utils.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/compat/win32/path-utils.c b/compat/win32/path-utils.c
new file mode 100644
index 0000000000..d9d3641de8
--- /dev/null
+++ b/compat/win32/path-utils.c
@@ -0,0 +1,28 @@
+#include "../../git-compat-util.h"
+
+int win32_skip_dos_drive_prefix(char **path)
+{
+ int ret = has_dos_drive_prefix(*path);
+ *path += ret;
+ return ret;
+}
+
+int win32_offset_1st_component(const char *path)
+{
+ char *pos = (char *)path;
+
+ /* unc paths */
+ if (!skip_dos_drive_prefix(&pos) &&
+ is_dir_sep(pos[0]) && is_dir_sep(pos[1])) {
+ /* skip server name */
+ pos = strpbrk(pos + 2, "\\/");
+ if (!pos)
+ return 0; /* Error: malformed unc path */
+
+ do {
+ pos++;
+ } while (*pos && !is_dir_sep(*pos));
+ }
+
+ return pos + is_dir_sep(*pos) - path;
+}