summaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/experimental/filesystem
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2019-01-17 15:31:59 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2019-01-17 15:31:59 +0000
commitdd0f7ba27314978e77aab5d8da1eb6070805ee4c (patch)
tree634a3e08bd9424e9edbddd635c8537536747bcf5 /libstdc++-v3/testsuite/experimental/filesystem
parenta9e48eaadab4e73c7d87ea13439dda4ba76abb2b (diff)
PR libstdc++/88881 adjust filesystem::status and tests for mingw semantics
On Windows stat("foo/bar/../.") will resolve to "foo" even if that is a non-directory and "foo/bar" does not exist. This is the expected behaviour and consistent with boost::filesystem, so don't try to correct it. The only unwanted behaviour is that stat("baz/") fails due to a mingw bug (fixed in mingw-w64 v6.0.0) so add a workaround. PR libstdc++/88881 * src/c++17/fs_ops.cc (canonical(const path&, error_code&)) [_GLIBCXX_FILESYSTEM_IS_WINDOWS]: Normalize path, to match behaviour of filesystem::exists. (create_directories(const path&, error_code&)): Add assertions. (status(const path&, error_code&)) [_GLIBCXX_FILESYSTEM_IS_WINDOWS]: Add workaround for bug in _wstat for paths with trailing slash. * testsuite/27_io/filesystem/operations/create_directories.cc: Adjust for expected behaviour on mingw. * testsuite/experimental/filesystem/operations/create_directories.cc: Likewise. * testsuite/27_io/filesystem/operations/temp_directory_path.cc: Use "TMP" instead of "TMPDIR" and clean environment before each test. Do not test permissions on mingw targets. From-SVN: r268034
Diffstat (limited to 'libstdc++-v3/testsuite/experimental/filesystem')
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc14
1 files changed, 11 insertions, 3 deletions
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc
index 5b3e3783af5..b6909b630d4 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc
@@ -63,12 +63,20 @@ test01()
b = fs::create_directories( p/"./d4/../d5", ec );
VERIFY( !ec );
VERIFY( b );
+#if defined(__MINGW32__) || defined(__MINGW64__)
+ // create_directories("./d4/..") is a no-op, does not create "d4"
+#else
VERIFY( is_directory(p/"d4") );
+#endif
VERIFY( is_directory(p/"d5") );
VERIFY( is_directory(p/"./d4/../d5") );
std::uintmax_t count = remove_all(p, ec);
+#if defined(__MINGW32__) || defined(__MINGW64__)
+ VERIFY( count == 5 );
+#else
VERIFY( count == 6 );
+#endif
}
void
@@ -87,8 +95,8 @@ test02()
VERIFY( ec == std::errc::not_a_directory );
result = create_directories(file.path / "foo", ec);
VERIFY( !result );
- __builtin_printf("%d\n", ec.value());
- VERIFY( ec == std::errc::not_a_directory );
+ VERIFY( ec );
+ ec.clear();
}
create_directories(p);
@@ -101,7 +109,7 @@ test02()
VERIFY( ec == std::errc::not_a_directory );
result = create_directories(file.path/"../bar", ec);
VERIFY( !result );
- VERIFY( ec == std::errc::not_a_directory );
+ VERIFY( ec );
}
}