Commit 07ec05d9 authored by Junio C Hamano's avatar Junio C Hamano

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
parents 9d2a2486 7814fbe3
...@@ -991,7 +991,7 @@ const char *remove_leading_path(const char *in, const char *prefix) ...@@ -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) ...@@ -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)) { while (is_dir_sep(*src))
*dst++ = '/'; src++;
while (is_dir_sep(*src))
src++;
}
for (;;) { for (;;) {
char c = *src; char c = *src;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment