1
1

Changed custom_canonicalize_pathname() function for handle URL:// style

Signed-off-by: Slava Zanko <slavazanko@gmail.com>
Этот коммит содержится в:
Slava Zanko 2011-06-07 16:35:17 +03:00
родитель d931785fd3
Коммит c442e5e75f
2 изменённых файлов: 20 добавлений и 2 удалений

Просмотреть файл

@ -72,6 +72,15 @@ START_TEST (test_canonicalize_path)
/* Collapse "/.." with the previous part of path */
check_canonicalize ("/some_server/ww/some_server/../ww/../some_server/..//ww/some_server/ww", "/some_server/ww/ww/some_server/ww");
/* URI style */
check_canonicalize ("/some_server/ww/ftp://user:pass@host.net/path/", "/some_server/ww/ftp://user:pass@host.net/path");
check_canonicalize ("/some_server/ww/ftp://user:pass@host.net/path/../../", "/some_server/ww");
check_canonicalize ("ftp://user:pass@host.net/path/../../", ".");
check_canonicalize ("ftp://user/../../", "..");
}
END_TEST

Просмотреть файл

@ -565,7 +565,7 @@ custom_canonicalize_pathname (char *path, CANON_PATH_FLAGS flags)
p = lpath;
while (*p)
{
if (p[0] == PATH_SEP && p[1] == PATH_SEP)
if (p[0] == PATH_SEP && p[1] == PATH_SEP && (p == lpath || *(p - 1) != ':'))
{
s = p + 1;
while (*(++s) == PATH_SEP);
@ -650,8 +650,17 @@ custom_canonicalize_pathname (char *path, CANON_PATH_FLAGS flags)
/* search for the previous token */
s = p - 1;
while (s >= lpath && *s != PATH_SEP)
while (s >= lpath)
{
if (s >= lpath + 2 && strncmp (s - 2, "://", 3) == 0)
{
s -= 2;
continue;
}
if (*s == PATH_SEP)
break;
s--;
}
s++;