mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-10 03:16:17 +01:00
Canonicalize paths that start with more than two slashes.
2008-01-22 Alexander Larsson <alexl@redhat.com> * glocalfile.c: (canonicalize_filename): Canonicalize paths that start with more than two slashes. * tests/g-file.c: (compare_two_files): (test_g_file_new_for_path): Test the above svn path=/trunk/; revision=6353
This commit is contained in:
parent
db5224fa85
commit
2544ae3cd6
@ -1,3 +1,15 @@
|
||||
2008-01-22 Alexander Larsson <alexl@redhat.com>
|
||||
|
||||
* glocalfile.c:
|
||||
(canonicalize_filename):
|
||||
Canonicalize paths that start with more than
|
||||
two slashes.
|
||||
|
||||
* tests/g-file.c:
|
||||
(compare_two_files):
|
||||
(test_g_file_new_for_path):
|
||||
Test the above
|
||||
|
||||
2008-01-22 Alexander Larsson <alexl@redhat.com>
|
||||
|
||||
* glocalfile.c:
|
||||
|
@ -214,6 +214,7 @@ canonicalize_filename (const char *filename)
|
||||
{
|
||||
char *canon, *start, *p, *q;
|
||||
char *cwd;
|
||||
int i;
|
||||
|
||||
if (!g_path_is_absolute (filename))
|
||||
{
|
||||
@ -226,6 +227,24 @@ canonicalize_filename (const char *filename)
|
||||
|
||||
start = (char *)g_path_skip_root (canon);
|
||||
|
||||
/* POSIX allows double slashes at the start to
|
||||
* mean something special (as does windows too).
|
||||
* So, "//" != "/", but more than two slashes
|
||||
* is treated as "/".
|
||||
*/
|
||||
i = 0;
|
||||
for (p = start - 1;
|
||||
(p >= canon) &&
|
||||
G_IS_DIR_SEPARATOR (*p);
|
||||
p--)
|
||||
i++;
|
||||
if (i > 2)
|
||||
{
|
||||
i -= 1;
|
||||
start -= i;
|
||||
memmove (start, start+i, strlen (start+i)+1);
|
||||
}
|
||||
|
||||
p = start;
|
||||
while (*p != 0)
|
||||
{
|
||||
|
@ -83,7 +83,7 @@ compare_two_files (const gboolean use_uri, const char *path1, const char *path2)
|
||||
GFile *file1 = NULL;
|
||||
GFile *file2 = NULL;
|
||||
gboolean equal;
|
||||
|
||||
|
||||
if (use_uri)
|
||||
{
|
||||
file1 = g_file_new_for_uri (path1);
|
||||
@ -120,7 +120,8 @@ test_g_file_new_for_path (void)
|
||||
{"/", TRUE, 0, "/somedir/../"},
|
||||
{"/", FALSE, 0, "/somedir/.../"},
|
||||
{"//tmp/dir1", TRUE, 0, "//tmp/dir1"},
|
||||
/* Should not fail: {"/tmp/dir1", TRUE, 0, "///tmp/dir1"}, */
|
||||
{"/tmp/dir1", TRUE, 0, "///tmp/dir1"},
|
||||
{"/tmp/dir1", TRUE, 0, "////tmp/dir1"},
|
||||
{"/tmp/dir1", TRUE, 0, "/tmp/./dir1"},
|
||||
{"/tmp/dir1", TRUE, 0, "/tmp//dir1"},
|
||||
{"/tmp/dir1", TRUE, 0, "/tmp///dir1///"},
|
||||
|
Loading…
Reference in New Issue
Block a user