MSYS2-packages/subversion/07-fix-path-tests.patch
2020-05-30 09:02:52 +03:00

650 lines
26 KiB
Diff

Don't support DOS paths for Cygwin.
From: David Rothenberger <daveroth@acm.org>
* But do support a little UNC.
---
subversion/libsvn_subr/dirent_uri.c | 55 +++++---
subversion/tests/libsvn_subr/dirent_uri-test.c | 158 +++++++++++++++++++++---
subversion/tests/libsvn_subr/path-test.c | 10 +-
3 files changed, 181 insertions(+), 42 deletions(-)
diff --git a/subversion/libsvn_subr/dirent_uri.c b/subversion/libsvn_subr/dirent_uri.c
index 059734c..38e4afb 100644
--- a/subversion/libsvn_subr/dirent_uri.c
+++ b/subversion/libsvn_subr/dirent_uri.c
@@ -56,7 +56,7 @@
/* This check must match the check on top of dirent_uri-tests.c and
path-tests.c */
-#if defined(WIN32) || defined(__CYGWIN__) || defined(__OS2__)
+#if defined(WIN32) || defined(__OS2__)
#define SVN_USE_DOS_PATHS
#endif
@@ -125,6 +125,7 @@ canonicalize_to_upper(char c)
static apr_size_t
dirent_root_length(const char *dirent, apr_size_t len)
{
+#if defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__)
#ifdef SVN_USE_DOS_PATHS
if (len >= 2 && dirent[1] == ':' &&
((dirent[0] >= 'A' && dirent[0] <= 'Z') ||
@@ -132,6 +133,7 @@ dirent_root_length(const char *dirent, apr_size_t len)
{
return (len > 2 && dirent[2] == '/') ? 3 : 2;
}
+#endif
if (len > 2 && dirent[0] == '/' && dirent[1] == '/')
{
@@ -141,7 +143,7 @@ dirent_root_length(const char *dirent, apr_size_t len)
i++;
if (i == len)
- return len; /* Cygwin drive alias, invalid path on WIN32 */
+ return 1;
i++; /* Skip '/' */
@@ -449,7 +451,7 @@ canonicalize(const char **canonical_path,
{
*(dst++) = *(src++);
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__)
/* On Windows permit two leading separator characters which means an
* UNC path. */
if ((type == type_dirent) && *src == '/')
@@ -551,7 +553,7 @@ canonicalize(const char **canonical_path,
*dst = '\0';
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__)
/* Skip leading double slashes when there are less than 2
* canon segments. UNC paths *MUST* have two segments. */
if ((type == type_dirent) && canon[0] == '/' && canon[1] == '/')
@@ -689,7 +691,7 @@ get_longest_ancestor_length(path_type_t types,
apr_size_t path1_len, path2_len;
apr_size_t i = 0;
apr_size_t last_dirsep = 0;
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__)
svn_boolean_t unc = FALSE;
#endif
@@ -722,7 +724,7 @@ get_longest_ancestor_length(path_type_t types,
return 0;
/* Handle some windows specific cases */
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__)
if (types == type_dirent)
{
/* don't count the '//' from UNC paths */
@@ -732,6 +734,7 @@ get_longest_ancestor_length(path_type_t types,
unc = TRUE;
}
+#ifdef SVN_USE_DOS_PATHS
/* X:/ and X:/foo */
if (i == 3 && path1[2] == '/' && path1[1] == ':')
return i;
@@ -749,8 +752,9 @@ get_longest_ancestor_length(path_type_t types,
/* X: and X:foo */
if (path1[i - 1] == ':' || path2[i - 1] == ':')
return i;
- }
#endif /* SVN_USE_DOS_PATHS */
+ }
+#endif /* defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__) */
/* last_dirsep is now the offset of the last directory separator we
crossed before reaching a non-matching byte. i is the offset of
@@ -765,18 +769,20 @@ get_longest_ancestor_length(path_type_t types,
{
/* Nothing in common but the root folder '/' or 'X:/' for Windows
dirents. */
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__)
if (! unc)
{
+#ifdef SVN_USE_DOS_PATHS
/* X:/foo and X:/bar returns X:/ */
if ((types == type_dirent) &&
last_dirsep == 2 && path1[1] == ':' && path1[2] == '/'
&& path2[1] == ':' && path2[2] == '/')
return 3;
#endif /* SVN_USE_DOS_PATHS */
+#endif /* defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__) */
if (last_dirsep == 0 && path1[0] == '/' && path2[0] == '/')
return 1;
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__)
}
#endif
}
@@ -952,7 +958,8 @@ svn_relpath__make_internal(const char **internal_style_relpath,
svn_boolean_t
svn_dirent_is_root(const char *dirent, apr_size_t len)
{
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__)
+#ifndef __CYGWIN__
/* On Windows and Cygwin, 'H:' or 'H:/' (where 'H' is any letter)
are also root directories */
if ((len == 2 || ((len == 3) && (dirent[2] == '/'))) &&
@@ -960,9 +967,9 @@ svn_dirent_is_root(const char *dirent, apr_size_t len)
((dirent[0] >= 'A' && dirent[0] <= 'Z') ||
(dirent[0] >= 'a' && dirent[0] <= 'z')))
return TRUE;
+#endif
- /* On Windows and Cygwin //server/share is a root directory,
- and on Cygwin //drive is a drive alias */
+ /* On Windows and Cygwin //server/share is a root directory */
if (len >= 2 && dirent[0] == '/' && dirent[1] == '/'
&& dirent[len - 1] != '/')
{
@@ -977,11 +984,7 @@ svn_dirent_is_root(const char *dirent, apr_size_t len)
return FALSE;
}
}
-#ifdef __CYGWIN__
- return (segments <= 1);
-#else
return (segments == 1); /* //drive is invalid on plain Windows */
-#endif
}
#endif
@@ -1822,7 +1825,7 @@ svn_dirent_is_canonical(const char *dirent, apr_pool_t *scratch_pool)
if (*ptr == '/')
{
ptr++;
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__)
/* Check for UNC paths */
if (*ptr == '/')
{
@@ -2509,7 +2512,7 @@ svn_uri_get_dirent_from_file_url(const char **dirent,
/* Duplicate the URL, starting at the top of the path.
At the same time, we URI-decode the path. */
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__)
/* On Windows, we'll typically have to skip the leading / if the
path starts with a drive letter. Like most Web browsers, We
support two variants of this scheme:
@@ -2526,10 +2529,11 @@ svn_uri_get_dirent_from_file_url(const char **dirent,
even if the path looks like it starts with a drive letter.
*/
{
- static const char valid_drive_letters[] =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
/* Casting away const! */
char *dup_path = (char *)svn_path_uri_decode(path, pool);
+#ifdef SVN_USE_DOS_PATHS
+ static const char valid_drive_letters[] =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
/* This check assumes ':' and '|' are already decoded! */
if (!hostname && dup_path[1] && strchr(valid_drive_letters, dup_path[1])
@@ -2562,6 +2566,7 @@ svn_uri_get_dirent_from_file_url(const char **dirent,
dup_path[2] = '/'; /* Ensure not relative for '\' after drive! */
}
}
+#endif
if (hostname)
{
if (dup_path[0] == '/' && dup_path[1] == '\0')
@@ -2575,7 +2580,7 @@ svn_uri_get_dirent_from_file_url(const char **dirent,
else
*dirent = dup_path;
}
-#else /* !SVN_USE_DOS_PATHS */
+#else /* !(defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__)) */
/* Currently, the only hostnames we are allowing on non-Win32 platforms
are the empty string and 'localhost'. */
if (hostname)
@@ -2603,7 +2608,15 @@ svn_uri_get_file_url_from_dirent(const char **url,
if (dirent[0] == '/' && dirent[1] == '\0')
dirent = NULL; /* "file://" is the canonical form of "file:///" */
+#ifdef __CYGWIN__
+ if (dirent != NULL && dirent[0] == '/' && dirent[1] == '/')
+ /* Handle UNC paths //server/share -> file://server/share */
+ *url = apr_pstrcat(pool, "file:", dirent, NULL);
+ else
+ *url = apr_pstrcat(pool, "file://", dirent, (char *)NULL);
+#else
*url = apr_pstrcat(pool, "file://", dirent, SVN_VA_NULL);
+#endif
#else
if (dirent[0] == '/')
{
diff --git a/subversion/tests/libsvn_subr/dirent_uri-test.c b/subversion/tests/libsvn_subr/dirent_uri-test.c
index 9afc5b6..a679344 100644
--- a/subversion/tests/libsvn_subr/dirent_uri-test.c
+++ b/subversion/tests/libsvn_subr/dirent_uri-test.c
@@ -45,7 +45,7 @@
#define SVN_EMPTY_PATH ""
/* This check must match the check on top of dirent_uri.c and path-tests.c */
-#if defined(WIN32) || defined(__CYGWIN__) || defined(__OS2__)
+#if defined(WIN32) || defined(__OS2__)
#define SVN_USE_DOS_PATHS
#endif
@@ -65,7 +65,7 @@ test_dirent_is_root(apr_pool_t *pool)
{ "/foo/bar", FALSE },
{ "/foo", FALSE },
{ "", FALSE },
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS)
{ "X:/foo", FALSE },
{ "X:/", TRUE },
{ "X:foo", FALSE }, /* Based on non absolute root */
@@ -74,6 +74,14 @@ test_dirent_is_root(apr_pool_t *pool)
{ "//srv/shr/fld", FALSE },
{ "//srv/s r", TRUE },
{ "//srv/s r/fld", FALSE },
+#elif defined(__CYGWIN__)
+ { "/", TRUE },
+ { "/X:foo", FALSE },
+ { "/X:", FALSE },
+ { "//srv/shr", TRUE },
+ { "//srv/shr/fld", FALSE },
+ { "//srv/s r", TRUE },
+ { "//srv/s r/fld", FALSE },
#else /* !SVN_USE_DOS_PATHS */
{ "/", TRUE },
{ "/X:foo", FALSE },
@@ -145,7 +153,7 @@ test_dirent_is_absolute(apr_pool_t *pool)
{ "foo/bar", FALSE },
{ "foo", FALSE },
{ "", FALSE },
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS)
{ "/foo/bar", FALSE },
{ "/foo", FALSE },
{ "/", FALSE },
@@ -157,6 +165,18 @@ test_dirent_is_absolute(apr_pool_t *pool)
{ "//srv/shr/fld", TRUE },
{ "//srv/s r", TRUE },
{ "//srv/s r/fld", TRUE },
+#elif defined(__CYGWIN__)
+ { "/foo/bar", TRUE },
+ { "/foo", TRUE },
+ { "/", TRUE },
+ { "C:/foo", FALSE },
+ { "C:/", FALSE },
+ { "c:/", FALSE },
+ { "c:/foo", FALSE },
+ { "//srv/shr", TRUE },
+ { "//srv/shr/fld", TRUE },
+ { "//srv/s r", TRUE },
+ { "//srv/s r/fld", TRUE },
#else /* !SVN_USE_DOS_PATHS */
{ "/foo/bar", TRUE },
{ "/foo", TRUE },
@@ -228,7 +248,7 @@ test_dirent_join(apr_pool_t *pool)
{ SVN_EMPTY_PATH, "/abc", "/abc" },
{ SVN_EMPTY_PATH, SVN_EMPTY_PATH, SVN_EMPTY_PATH },
{ "/", "/", "/" },
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS)
{ "X:/", SVN_EMPTY_PATH, "X:/" },
{ "X:/", "abc", "X:/abc" },
{ "X:/", "/def", "X:/def" },
@@ -251,6 +271,14 @@ test_dirent_join(apr_pool_t *pool)
{ "aa", "A:", "A:" },
{ "aa", "A:file", "A:file"},
{ "A:", "/", "A:/" },
+#elif defined(__CYGWIN__)
+ { "X:abc", "X:/def", "X:abc/X:/def" },
+ { "X:","abc", "X:/abc" },
+ { "X:/abc", "X:/def", "X:/abc/X:/def" },
+ { "//srv/shr", "fld", "//srv/shr/fld" },
+ { "//srv/shr/fld", "subfld", "//srv/shr/fld/subfld" },
+ { "//srv/shr/fld", "//srv/shr", "//srv/shr" },
+ { "//srv/s r", "fld", "//srv/s r/fld" },
#else /* !SVN_USE_DOS_PATHS */
{ "X:abc", "X:/def", "X:abc/X:/def" },
{ "X:","abc", "X:/abc" },
@@ -319,7 +347,7 @@ test_dirent_join(apr_pool_t *pool)
TEST_MANY((pool, SVN_EMPTY_PATH, "/", SVN_EMPTY_PATH, SVN_VA_NULL), "/");
TEST_MANY((pool, SVN_EMPTY_PATH, SVN_EMPTY_PATH, "/", SVN_VA_NULL), "/");
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS)
TEST_MANY((pool, "X:/", "def", "ghi", SVN_VA_NULL), "X:/def/ghi");
TEST_MANY((pool, "abc", "X:/", "ghi", SVN_VA_NULL), "X:/ghi");
TEST_MANY((pool, "abc", "def", "X:/", SVN_VA_NULL), "X:/");
@@ -348,6 +376,17 @@ test_dirent_join(apr_pool_t *pool)
TEST_MANY((pool, "abcd", "/dir", "A:", "file", SVN_VA_NULL), "A:file");
TEST_MANY((pool, "abcd", "A:", "/dir", "file", SVN_VA_NULL), "A:/dir/file");
+#elif defined(__CYGWIN__)
+ TEST_MANY((pool, "X:", "def", "ghi", SVN_VA_NULL), "X:/def/ghi");
+ TEST_MANY((pool, "X:", SVN_EMPTY_PATH, "ghi", SVN_VA_NULL), "X:/ghi");
+ TEST_MANY((pool, "X:", "def", SVN_EMPTY_PATH, SVN_VA_NULL), "X:/def");
+ TEST_MANY((pool, SVN_EMPTY_PATH, "X:", "ghi", SVN_VA_NULL), "X:/ghi");
+ TEST_MANY((pool, "//srv/shr", "def", "ghi", SVN_VA_NULL), "//srv/shr/def/ghi");
+ TEST_MANY((pool, "//srv/shr/fld", "def", "ghi", SVN_VA_NULL), "//srv/shr/fld/def/ghi");
+ TEST_MANY((pool, "//srv/shr/fld", "def", "//srv/shr", SVN_VA_NULL), "//srv/shr");
+ TEST_MANY((pool, "//srv/s r/fld", "def", "//srv/s r", SVN_VA_NULL), "//srv/s r");
+ TEST_MANY((pool, SVN_EMPTY_PATH, "//srv/shr/fld", "def", "ghi", SVN_VA_NULL), "//srv/shr/fld/def/ghi");
+ TEST_MANY((pool, SVN_EMPTY_PATH, "//srv/shr/fld", "def", "//srv/shr", SVN_VA_NULL), "//srv/shr");
#else /* !SVN_USE_DOS_PATHS */
TEST_MANY((pool, "X:", "def", "ghi", SVN_VA_NULL), "X:/def/ghi");
TEST_MANY((pool, "X:", SVN_EMPTY_PATH, "ghi", SVN_VA_NULL), "X:/ghi");
@@ -423,7 +462,7 @@ test_dirent_basename(apr_pool_t *pool)
{ "/", "" },
{ SVN_EMPTY_PATH, SVN_EMPTY_PATH },
{ "X:/abc", "abc" },
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS)
{ "X:", "" },
{ "X:/", "" },
{ "X:abc", "abc" },
@@ -431,6 +470,13 @@ test_dirent_basename(apr_pool_t *pool)
{ "//srv/shr/fld", "fld" },
{ "//srv/shr/fld/subfld", "subfld" },
{ "//srv/s r/fld", "fld" },
+#elif defined(__CYGWIN__)
+ { "X:", "X:" },
+ { "X:abc", "X:abc" },
+ { "//srv/shr", "" },
+ { "//srv/shr/fld", "fld" },
+ { "//srv/shr/fld/subfld", "subfld" },
+ { "//srv/s r/fld", "fld" },
#else /* !SVN_USE_DOS_PATHS */
{ "X:", "X:" },
{ "X:abc", "X:abc" },
@@ -540,7 +586,7 @@ test_dirent_dirname(apr_pool_t *pool)
{ "/", "/" },
{ SVN_EMPTY_PATH, SVN_EMPTY_PATH },
{ "X:abc/def", "X:abc" },
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS)
{ "X:/", "X:/" },
{ "X:/abc", "X:/" },
{ "X:abc", "X:" },
@@ -549,6 +595,14 @@ test_dirent_dirname(apr_pool_t *pool)
{ "//srv/shr/fld", "//srv/shr" },
{ "//srv/shr/fld/subfld", "//srv/shr/fld" },
{ "//srv/s r/fld", "//srv/s r" },
+#elif defined(__CYGWIN__)
+ /* on non-Windows platforms, ':' is allowed in pathnames */
+ { "X:", "" },
+ { "X:abc", "" },
+ { "//srv/shr", "//srv/shr" },
+ { "//srv/shr/fld", "//srv/shr" },
+ { "//srv/shr/fld/subfld", "//srv/shr/fld" },
+ { "//srv/s r/fld", "//srv/s r" },
#else /* !SVN_USE_DOS_PATHS */
/* on non-Windows platforms, ':' is allowed in pathnames */
{ "X:", "" },
@@ -695,7 +749,9 @@ test_dirent_canonicalize(apr_pool_t *pool)
{ "x:/", "X:/" },
{ "x:", "X:" },
{ "x:AAAAA", "X:AAAAA" },
- /* We permit UNC dirents on Windows. By definition UNC
+#endif /* SVN_USE_DOS_PATHS */
+#if defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__)
+ /* We permit UNC dirents on Windows and Cygwin. By definition UNC
* dirents must have two components so we should remove the
* double slash if there is only one component. */
{ "//hst/foo", "//hst/foo" },
@@ -706,7 +762,7 @@ test_dirent_canonicalize(apr_pool_t *pool)
{ "//SERVER/SHare/", "//server/SHare" },
{ "//srv/s r", "//srv/s r" },
{ "//srv/s r/qq", "//srv/s r/qq" },
-#endif /* SVN_USE_DOS_PATHS */
+#endif /* defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__) */
};
for (t = tests; t < tests + COUNT_OF(tests); t++)
@@ -1077,7 +1133,7 @@ test_dirent_is_canonical(apr_pool_t *pool)
{ "X:foo", TRUE },
{ "X:foo/", FALSE },
{ "file with spaces", TRUE },
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS)
{ "X:/", TRUE },
{ "X:/foo", TRUE },
{ "X:", TRUE },
@@ -1096,6 +1152,22 @@ test_dirent_is_canonical(apr_pool_t *pool)
{ "//server/SHare", TRUE },
{ "//SERVER/SHare", FALSE },
{ "//srv/SH RE", TRUE },
+#elif defined(__CYGWIN__)
+ { "X:/", FALSE },
+ /* Some people use colons in their filenames. */
+ { ":", TRUE },
+ { ".:", TRUE },
+ { "foo/.:", TRUE },
+ /* We permit UNC dirents on Cygwin. By definition UNC
+ * dirents must have two components so we should remove the
+ * double slash if there is only one component. */
+ { "//hst", FALSE },
+ { "//hst/./", FALSE },
+ { "//server/share/", FALSE },
+ { "//server/share", TRUE },
+ { "//server/SHare", TRUE },
+ { "//SERVER/SHare", FALSE },
+ { "//srv/SH RE", TRUE },
#else /* !SVN_USE_DOS_PATHS */
{ "X:/", FALSE },
/* Some people use colons in their filenames. */
@@ -1279,13 +1351,18 @@ test_dirent_split(apr_pool_t *pool)
{ "/", "/", "" },
{ "X:/foo/bar", "X:/foo", "bar" },
{ "X:foo/bar", "X:foo", "bar" },
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS)
{ "X:/", "X:/", "" },
{ "X:/foo", "X:/", "foo" },
{ "X:foo", "X:", "foo" },
{ "//srv/shr", "//srv/shr", "" },
{ "//srv/shr/fld", "//srv/shr", "fld" },
{ "//srv/s r", "//srv/s r", "" },
+#elif defined(__CYGWIN__)
+ { "X:foo", SVN_EMPTY_PATH, "X:foo" },
+ { "//srv/shr", "//srv/shr", "" },
+ { "//srv/shr/fld", "//srv/shr", "fld" },
+ { "//srv/s r", "//srv/s r", "" },
#else /* !SVN_USE_DOS_PATHS */
{ "X:foo", SVN_EMPTY_PATH, "X:foo" },
#endif /* SVN_USE_DOS_PATHS */
@@ -1425,7 +1502,7 @@ static const testcase_ancestor_t dirent_ancestor_tests[] =
{ "/foo/bar/zig", "/foo", NULL },
{ "/foo/bar/zig", "/foo/ba", NULL },
{ "/foo/bar/zig", "/foo/bar/zi", NULL },
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS)
{ "", "C:", NULL },
{ "", "C:foo", NULL },
{ "", "C:/", NULL },
@@ -1459,6 +1536,21 @@ static const testcase_ancestor_t dirent_ancestor_tests[] =
{ "//srv/shr/fld", "//srv2/shr/fld", NULL },
{ "//srv/shr/fld", "//srv/shr/f", NULL },
{ "/", "//srv/share", NULL },
+#elif defined(__CYGWIN__)
+ { "", "C:", "C:" },
+ { "", "C:/foo", "C:/foo" },
+ { "X:", "X:foo", NULL },
+ { "//srv", "//srv/share", NULL },
+ { "//srv", "//srv/shr/fld", NULL },
+ { "//srv/shr", "//srv", NULL },
+ { "//srv/share", "//vrs/share", NULL },
+ { "//srv/share", "//srv/share/foo", "foo" },
+ { "//srv/shr", "//srv/shr/fld", "fld" },
+ { "//srv/s r", "//srv/s r/fld", "fld" },
+ { "//srv/shr/fld", "//srv/shr", NULL },
+ { "//srv/shr/fld", "//srv2/shr/fld", NULL },
+ { "//srv/shr/fld", "//srv/shr/f", NULL },
+ { "/", "//srv/share", NULL },
#else /* !SVN_USE_DOS_PATHS */
{ "", "C:", "C:" },
{ "", "C:/foo", "C:/foo" },
@@ -1646,7 +1738,7 @@ test_dirent_get_longest_ancestor(apr_pool_t *pool)
{ "/", "/", "/"},
{ "X:foo", "Y:foo", SVN_EMPTY_PATH},
{ "X:/folder1", "Y:/folder2", SVN_EMPTY_PATH},
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS)
{ "X:/", "X:/", "X:/"},
{ "X:/foo/bar/A/D/H/psi", "X:/foo/bar/A/B", "X:/foo/bar/A" },
{ "X:/foo/bar/boo", "X:/foo/bar/baz/boz", "X:/foo/bar"},
@@ -1660,6 +1752,14 @@ test_dirent_get_longest_ancestor(apr_pool_t *pool)
{ "X:", "X:foo", "X:"},
{ "X:", "X:/", SVN_EMPTY_PATH},
{ "X:foo", "X:bar", "X:"},
+#elif defined(__CYGWIN__)
+ { "X:/foo", "X:", "X:"},
+ { "X:/folder1", "X:/folder2", "X:"},
+ { "X:", "X:foo", SVN_EMPTY_PATH},
+ { "X:foo", "X:bar", SVN_EMPTY_PATH},
+ { "//srv/shr", "//srv/shr/fld", "//srv/shr" },
+ { "//srv/shr/fld", "//srv/shr", "//srv/shr" },
+ { "//srv/shr/fld", "//srv2/shr/fld", SVN_EMPTY_PATH },
#else /* !SVN_USE_DOS_PATHS */
{ "X:/foo", "X:", "X:"},
{ "X:/folder1", "X:/folder2", "X:"},
@@ -1805,11 +1905,13 @@ test_dirent_is_child(apr_pool_t *pool)
".foo",
"/",
"foo2",
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__)
"//srv",
"//srv2",
"//srv/shr",
"//srv/shr/fld",
+#endif
+#ifdef SVN_USE_DOS_PATHS
"H:/foo/bar",
"H:/foo/baz",
"H:/foo/bar/baz",
@@ -1851,7 +1953,7 @@ test_dirent_is_child(apr_pool_t *pool)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__)
/* //srv paths */
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, "shr", "shr/fld", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
@@ -1861,6 +1963,8 @@ test_dirent_is_child(apr_pool_t *pool)
0, 0, 0, "fld", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+#endif
+#ifdef SVN_USE_DOS_PATHS
/* H:/ paths */
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, "baz", 0, "baz/bing/boom", 0, 0, 0, 0, 0 },
@@ -2229,13 +2333,19 @@ test_dirent_local_style(apr_pool_t *pool)
} tests[] = {
{ "", "." },
{ ".", "." },
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS)
{ "A:/", "A:\\" },
{ "A:/file", "A:\\file" },
{ "dir/file", "dir\\file" },
{ "/", "\\" },
{ "//server/share/dir", "\\\\server\\share\\dir" },
{ "//server/sh re/dir", "\\\\server\\sh re\\dir" },
+#elif defined(__CYGWIN__)
+ { "a:/file", "a:/file" },
+ { "dir/file", "dir/file" },
+ { "/", "/" },
+ { "//server/share/dir", "//server/share/dir" },
+ { "//server/sh re/dir", "//server/sh re/dir" },
#else
{ "a:/file", "a:/file" },
{ "dir/file", "dir/file" },
@@ -2271,7 +2381,7 @@ test_dirent_internal_style(apr_pool_t *pool)
{ "file", "file" },
{ "dir/file", "dir/file" },
{ "dir/file/./.", "dir/file" },
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS)
{ "A:\\", "A:/" },
{ "A:\\file", "A:/file" },
{ "A:file", "A:file" },
@@ -2286,6 +2396,14 @@ test_dirent_internal_style(apr_pool_t *pool)
{ "//srv/shr", "//srv/shr" },
{ "//srv/s r", "//srv/s r" },
{ "//srv/s r", "//srv/s r" },
+#elif defined(__CYGWIN__)
+ { "a:/", "a:" }, /* Wrong but expected for svn_path_*() */
+ { "a:/file", "a:/file" },
+ { "dir/file", "dir/file" },
+ { "/", "/" },
+ { "//srv/shr", "//srv/shr" },
+ { "//srv/s r", "//srv/s r" },
+ { "//srv/s r", "//srv/s r" },
#else
{ "a:/", "a:" }, /* Wrong but expected for svn_path_*() */
{ "a:/file", "a:/file" },
@@ -2358,9 +2476,11 @@ test_dirent_from_file_url(apr_pool_t *pool)
{ "file://localhost", "/" },
{ "file://localhost/dir", "/dir" },
{ "file://localhost/dir/path", "/dir/path" },
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__)
{ "file://server/share", "//server/share" },
{ "file://server/share/dir", "//server/share/dir" },
+#endif
+#ifdef SVN_USE_DOS_PATHS
{ "file:///A:", "A:/" },
{ "file:///A:/dir", "A:/dir" },
{ "file:///A:dir", "A:dir" },
@@ -2418,7 +2538,7 @@ test_dirent_from_file_url_errors(apr_pool_t *pool)
/* error if scheme is not "file" */
"http://localhost/dir",
"file+ssh://localhost/dir",
-#ifndef SVN_USE_DOS_PATHS
+#if !(defined(SVN_USE_DOS_PATHS) || defined(__CYGWIN__))
"file://localhostwrongname/dir", /* error if host name not "localhost" */
#endif
};
diff --git a/subversion/tests/libsvn_subr/path-test.c b/subversion/tests/libsvn_subr/path-test.c
index 6f0a996..3a8e2fb 100644
--- a/subversion/tests/libsvn_subr/path-test.c
+++ b/subversion/tests/libsvn_subr/path-test.c
@@ -53,7 +53,7 @@
/* This check must match the check on top of dirent_uri.c and
dirent_uri-tests.c */
-#if defined(WIN32) || defined(__CYGWIN__) || defined(__OS2__)
+#if defined(WIN32) || defined(__OS2__)
#define SVN_USE_DOS_PATHS
#endif
@@ -1438,12 +1438,18 @@ test_path_internal_style(apr_pool_t *pool)
{ ".", "" },
{ "http://host/dir", "http://host/dir" },
{ "/", "/" },
-#ifdef SVN_USE_DOS_PATHS
+#if defined(SVN_USE_DOS_PATHS)
{ "a:\\", "A:/" },
{ "a:\\file", "A:/file" },
{ "dir\\file", "dir/file" },
{ "\\", "/" },
{ "\\\\server/share/dir", "//server/share/dir" },
+#elif defined(__CYGWIN__)
+ { "a:/", "a:" },
+ { "a:/file", "a:/file" },
+ { "dir/file", "dir/file" },
+ { "/", "/" },
+ { "//server/share/dir", "//server/share/dir" },
#else
{ "a:/", "a:" },
{ "a:/file", "a:/file" },