You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2012/11/14 11:54:37 UTC
svn commit: r1409146 - in /subversion/trunk/subversion:
libsvn_subr/dirent_uri.c tests/libsvn_subr/dirent_uri-test.c
Author: rhuijben
Date: Wed Nov 14 10:54:36 2012
New Revision: 1409146
URL: http://svn.apache.org/viewvc?rev=1409146&view=rev
Log:
Resolve a specific case where calling svn_uri_get_file_url_from_dirent()
doesn't return a canonical uri.
* subversion/libsvn_subr/dirent_uri.c
(svn_uri_get_file_url_from_dirent): Make sure "C:/" returns a canonical url.
* subversion/tests/libsvn_subr/dirent_uri-test.c
(test_file_url_from_dirent): Update expected result. Test result for being
canonical.
Modified:
subversion/trunk/subversion/libsvn_subr/dirent_uri.c
subversion/trunk/subversion/tests/libsvn_subr/dirent_uri-test.c
Modified: subversion/trunk/subversion/libsvn_subr/dirent_uri.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/dirent_uri.c?rev=1409146&r1=1409145&r2=1409146&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/dirent_uri.c (original)
+++ subversion/trunk/subversion/libsvn_subr/dirent_uri.c Wed Nov 14 10:54:36 2012
@@ -2402,7 +2402,17 @@ svn_uri_get_file_url_from_dirent(const c
*url = apr_pstrcat(pool, "file:", dirent, NULL);
}
else
- *url = apr_pstrcat(pool, "file:///", dirent, NULL);
+ {
+ char *uri = apr_pstrcat(pool, "file:///", dirent, NULL);
+ apr_size_t len = 8 /* strlen("file:///") */ + strlen(dirent);
+
+ /* "C:/" is a canonical dirent on Windows,
+ but "file:///C:/" is not a canonical uri */
+ if (uri[len-1] == '/')
+ uri[len-1] = '\0';
+
+ *url = uri;
+ }
#endif
return SVN_NO_ERROR;
Modified: subversion/trunk/subversion/tests/libsvn_subr/dirent_uri-test.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_subr/dirent_uri-test.c?rev=1409146&r1=1409145&r2=1409146&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_subr/dirent_uri-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_subr/dirent_uri-test.c Wed Nov 14 10:54:36 2012
@@ -2369,7 +2369,7 @@ test_file_url_from_dirent(apr_pool_t *po
} tests[] = {
#ifdef SVN_USE_DOS_PATHS
{ "C:/file", "file:///C:/file" },
- { "C:/", "file:///C:/" },
+ { "C:/", "file:///C:" },
{ "C:/File#$", "file:///C:/File%23$" },
/* We can't check these as svn_dirent_get_absolute() won't work
on shares that don't exist */
@@ -2396,6 +2396,8 @@ test_file_url_from_dirent(apr_pool_t *po
"svn_uri_get_file_url_from_dirent(\"%s\") "
"returned \"%s\" expected \"%s\"",
tests[i].dirent, result, tests[i].result);
+
+ SVN_TEST_ASSERT(svn_uri_is_canonical(result, pool));
}
return SVN_NO_ERROR;