Windows: Don't use literal path separators

Per #2471, some path handling functions hardcode the UNIX path
separator '/' causing them to fail in Windows.

When BLACKSLASH_IN_FILENAME is set we may have to check against
psepc and psepcN instead of PATHSEP or use vim_ispathsep_nocolon().
This commit is contained in:
Rui Abreu Ferreira 2015-05-12 17:46:34 +01:00
parent 006f9c0c9c
commit e30b2c2054
1 changed files with 6 additions and 6 deletions

View File

@ -562,11 +562,12 @@ static size_t do_path_expand(garray_T *gap, const char_u *path,
while (*path_end != NUL) {
/* May ignore a wildcard that has a backslash before it; it will
* be removed by rem_backslash() or file_pat_to_reg_pat() below. */
if (path_end >= path + wildoff && rem_backslash(path_end))
if (path_end >= path + wildoff && rem_backslash(path_end)) {
*p++ = *path_end++;
else if (*path_end == '/') {
if (e != NULL)
} else if (vim_ispathsep_nocolon(*path_end)) {
if (e != NULL) {
break;
}
s = p + 1;
} else if (path_end >= path + wildoff
&& (vim_strchr((char_u *)"*?[{~$", *path_end) != NULL
@ -2098,7 +2099,6 @@ int path_full_dir_name(char *directory, char *buffer, size_t len)
return retval;
}
// Append to_append to path with a slash in between.
// Append to_append to path with a slash in between.
int append_path(char *path, const char *to_append, size_t max_len)
{
@ -2116,7 +2116,7 @@ int append_path(char *path, const char *to_append, size_t max_len)
}
// Glue both paths with a slash.
if (current_length > 0 && path[current_length-1] != '/') {
if (current_length > 0 && !vim_ispathsep_nocolon(path[current_length-1])) {
current_length += 1; // Count the trailing slash.
// +1 for the NUL at the end.
@ -2124,7 +2124,7 @@ int append_path(char *path, const char *to_append, size_t max_len)
return FAIL;
}
STRCAT(path, "/");
STRCAT(path, PATHSEPSTR);
}
// +1 for the NUL at the end.