summaryrefslogtreecommitdiff
path: root/compat/mingw.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2016-02-05 22:54:17 (GMT)
committerJunio C Hamano <gitster@pobox.com>2016-02-05 22:54:17 (GMT)
commit07be1da216debe1f76cd4d03ac5effcb9e40e6c6 (patch)
tree7642a42d6b7348710a13374c6b6dda1b6a51d225 /compat/mingw.c
parent081363dde231346c2f051cd7d41622f6fa02e3cb (diff)
parente7d5ce816579723150c341116737fb51d8e33eb3 (diff)
downloadgit-07be1da216debe1f76cd4d03ac5effcb9e40e6c6.zip
git-07be1da216debe1f76cd4d03ac5effcb9e40e6c6.tar.gz
git-07be1da216debe1f76cd4d03ac5effcb9e40e6c6.tar.bz2
Merge branch 'js/dirname-basename' into maint
dirname() emulation has been added, as Msys2 lacks it. * js/dirname-basename: mingw: avoid linking to the C library's isalpha() t0060: loosen overly strict expectations t0060: verify that basename() and dirname() work as expected compat/basename.c: provide a dirname() compatibility function compat/basename: make basename() conform to POSIX Refactor skipping DOS drive prefixes
Diffstat (limited to 'compat/mingw.c')
-rw-r--r--compat/mingw.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/compat/mingw.c b/compat/mingw.c
index 5edea29..9b2a1f5 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -1932,28 +1932,31 @@ pid_t waitpid(pid_t pid, int *status, int options)
return -1;
}
+int mingw_skip_dos_drive_prefix(char **path)
+{
+ int ret = has_dos_drive_prefix(*path);
+ *path += ret;
+ return ret;
+}
+
int mingw_offset_1st_component(const char *path)
{
- int offset = 0;
- if (has_dos_drive_prefix(path))
- offset = 2;
+ char *pos = (char *)path;
/* unc paths */
- else if (is_dir_sep(path[0]) && is_dir_sep(path[1])) {
-
+ if (!skip_dos_drive_prefix(&pos) &&
+ is_dir_sep(pos[0]) && is_dir_sep(pos[1])) {
/* skip server name */
- char *pos = strpbrk(path + 2, "\\/");
+ pos = strpbrk(pos + 2, "\\/");
if (!pos)
return 0; /* Error: malformed unc path */
do {
pos++;
} while (*pos && !is_dir_sep(*pos));
-
- offset = pos - path;
}
- return offset + is_dir_sep(path[offset]);
+ return pos + is_dir_sep(*pos) - path;
}
int xutftowcsn(wchar_t *wcs, const char *utfs, size_t wcslen, int utflen)