projects
/
gnulib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
canonicalize: fix // handling
[gnulib.git]
/
lib
/
canonicalize.c
diff --git
a/lib/canonicalize.c
b/lib/canonicalize.c
index
d3e5645
..
ed094b7
100644
(file)
--- a/
lib/canonicalize.c
+++ b/
lib/canonicalize.c
@@
-145,7
+145,7
@@
canonicalize_filename_mode (const char *name, canonicalize_mode_t can_mode)
rname_limit = rname + PATH_MAX;
rname[0] = '/';
dest = rname + 1;
rname_limit = rname + PATH_MAX;
rname[0] = '/';
dest = rname + 1;
- if (DOUBLE_SLASH_IS_DISTINCT_ROOT && name[1] == '/')
+ if (DOUBLE_SLASH_IS_DISTINCT_ROOT && name[1] == '/'
&& name[2] != '/'
)
*dest++ = '/';
}
*dest++ = '/';
}
@@
-169,7
+169,7
@@
canonicalize_filename_mode (const char *name, canonicalize_mode_t can_mode)
if (dest > rname + 1)
while ((--dest)[-1] != '/');
if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1
if (dest > rname + 1)
while ((--dest)[-1] != '/');
if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1
- && *dest == '/')
+ && *dest == '/'
&& dest[1] != '/'
)
dest++;
}
else
dest++;
}
else
@@
-267,7
+267,8
@@
canonicalize_filename_mode (const char *name, canonicalize_mode_t can_mode)
if (buf[0] == '/')
{
dest = rname + 1; /* It's an absolute symlink */
if (buf[0] == '/')
{
dest = rname + 1; /* It's an absolute symlink */
- if (DOUBLE_SLASH_IS_DISTINCT_ROOT && buf[1] == '/')
+ if (DOUBLE_SLASH_IS_DISTINCT_ROOT
+ && buf[1] == '/' && buf[2] != '/')
*dest++ = '/';
}
else
*dest++ = '/';
}
else
@@
-277,7
+278,7
@@
canonicalize_filename_mode (const char *name, canonicalize_mode_t can_mode)
if (dest > rname + 1)
while ((--dest)[-1] != '/');
if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1
if (dest > rname + 1)
while ((--dest)[-1] != '/');
if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1
- && *dest == '/')
+ && *dest == '/'
&& dest[1] != '/'
)
dest++;
}
dest++;
}
@@
-295,7
+296,8
@@
canonicalize_filename_mode (const char *name, canonicalize_mode_t can_mode)
}
if (dest > rname + 1 && dest[-1] == '/')
--dest;
}
if (dest > rname + 1 && dest[-1] == '/')
--dest;
- if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && *dest == '/')
+ if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1
+ && *dest == '/' && dest[1] != '/')
dest++;
*dest = '\0';
if (rname_limit != dest + 1)
dest++;
*dest = '\0';
if (rname_limit != dest + 1)