Merge branch 'js/normalize-path-copy-ceil' into maint
A pathname that begins with "//" or "\\" on Windows is special but path normalization logic was unaware of it. * js/normalize-path-copy-ceil: normalize_path_copy(): fix pushing to //server/share/dir on Windows
This commit is contained in:
commit
07ec05d9e6
19
path.c
19
path.c
@ -991,7 +991,7 @@ const char *remove_leading_path(const char *in, const char *prefix)
|
|||||||
*
|
*
|
||||||
* Performs the following normalizations on src, storing the result in dst:
|
* Performs the following normalizations on src, storing the result in dst:
|
||||||
* - Ensures that components are separated by '/' (Windows only)
|
* - Ensures that components are separated by '/' (Windows only)
|
||||||
* - Squashes sequences of '/'.
|
* - Squashes sequences of '/' except "//server/share" on Windows
|
||||||
* - Removes "." components.
|
* - Removes "." components.
|
||||||
* - Removes ".." components, and the components the precede them.
|
* - Removes ".." components, and the components the precede them.
|
||||||
* Returns failure (non-zero) if a ".." component appears as first path
|
* Returns failure (non-zero) if a ".." component appears as first path
|
||||||
@ -1014,17 +1014,22 @@ const char *remove_leading_path(const char *in, const char *prefix)
|
|||||||
int normalize_path_copy_len(char *dst, const char *src, int *prefix_len)
|
int normalize_path_copy_len(char *dst, const char *src, int *prefix_len)
|
||||||
{
|
{
|
||||||
char *dst0;
|
char *dst0;
|
||||||
int i;
|
const char *end;
|
||||||
|
|
||||||
for (i = has_dos_drive_prefix(src); i > 0; i--)
|
/*
|
||||||
*dst++ = *src++;
|
* Copy initial part of absolute path: "/", "C:/", "//server/share/".
|
||||||
|
*/
|
||||||
|
end = src + offset_1st_component(src);
|
||||||
|
while (src < end) {
|
||||||
|
char c = *src++;
|
||||||
|
if (is_dir_sep(c))
|
||||||
|
c = '/';
|
||||||
|
*dst++ = c;
|
||||||
|
}
|
||||||
dst0 = dst;
|
dst0 = dst;
|
||||||
|
|
||||||
if (is_dir_sep(*src)) {
|
|
||||||
*dst++ = '/';
|
|
||||||
while (is_dir_sep(*src))
|
while (is_dir_sep(*src))
|
||||||
src++;
|
src++;
|
||||||
}
|
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
char c = *src;
|
char c = *src;
|
||||||
|
Loading…
Reference in New Issue
Block a user