mingw: support UNC alternates

Just like we support having alternates pointing to different drives, we
want to support alternates pointing to network shares, i.e. UNC paths.

Technically, what we do in this patch is not to support UNC alternates,
but to support UNC paths when normalizing paths. But the latter implies
the former, and the former really was the motivation for this patch.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
Johannes Schindelin
2015-08-31 12:57:45 +00:00
parent 4638a925c0
commit 2c9c9aa0c6
3 changed files with 11 additions and 2 deletions

View File

@@ -395,6 +395,7 @@ HANDLE winansi_get_osfhandle(int fd);
(isalpha(*(path)) && (path)[1] == ':' ? 2 : 0)
int mingw_skip_dos_drive_prefix(char **path);
#define skip_dos_drive_prefix mingw_skip_dos_drive_prefix
#define has_unc_prefix(path) (*(path) == '\\' && (path)[1] == '\\' ? 2 : 0)
#define is_dir_sep(c) ((c) == '/' || (c) == '\\')
static inline char *mingw_find_last_dir_sep(const char *path)
{

View File

@@ -346,6 +346,14 @@ static inline int git_skip_dos_drive_prefix(char **path)
#define skip_dos_drive_prefix git_skip_dos_drive_prefix
#endif
#ifndef has_unc_prefix
static inline int git_has_unc_prefix(const char *path)
{
return 0;
}
#define has_unc_prefix git_has_unc_prefix
#endif
#ifndef is_dir_sep
static inline int git_is_dir_sep(int c)
{

4
path.c
View File

@@ -1014,9 +1014,9 @@ const char *remove_leading_path(const char *in, const char *prefix)
int normalize_path_copy_len(char *dst, const char *src, int *prefix_len)
{
char *dst0;
int i;
int i = has_unc_prefix(src);
for (i = has_dos_drive_prefix(src); i > 0; i--)
for (i = i ? i : has_dos_drive_prefix(src); i > 0; i--)
*dst++ = *src++;
dst0 = dst;