diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2019-01-17 15:31:59 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2019-01-17 15:31:59 +0000 |
commit | dd0f7ba27314978e77aab5d8da1eb6070805ee4c (patch) | |
tree | 634a3e08bd9424e9edbddd635c8537536747bcf5 /libstdc++-v3/testsuite/experimental/filesystem | |
parent | a9e48eaadab4e73c7d87ea13439dda4ba76abb2b (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.cc | 14 |
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 ); } } |