libstdc++: fs: rtems subdir renaming
Commit Message
RTEMS's implementation of rename(), at least on a temporary RAM
filesystem, allows a subdir to be moved into itself, but prevents a
dir from being renamed (in?)to an existing directory. Adjust the
expectations of filesystem rename tests.
Regstrapped on x86_64-linux-gnu, also tested with a cross to
aarch64-rtems6. Ok to install?
for libstdc++-v3/ChangeLog
* testsuite/27_io/filesystem/operations/rename.cc [__rtems__]
(test_directories): Skip attempt to rename into itself, or to
an existing directory.
* testsuite/27_io/filesystem/operations/rename.cc [__rtems__]
(test_directories): Likewise.
---
.../27_io/filesystem/operations/rename.cc | 6 +++++-
.../experimental/filesystem/operations/rename.cc | 11 ++++++++++-
2 files changed, 15 insertions(+), 2 deletions(-)
@@ -125,11 +125,15 @@ test_directories()
VERIFY( is_directory(dir/"subdir2") );
VERIFY( !exists(dir/"subdir") );
+#ifdef __rtems__
+ // Can rename a directory to a sub-directory of itself?!?
+#else
// Cannot rename a directory to a sub-directory of itself.
fs::rename(dir/"subdir2", dir/"subdir2/subsubdir", ec);
VERIFY( ec );
VERIFY( is_directory(dir/"subdir2") );
VERIFY( !exists(dir/"subdir2"/"subsubdir") );
+#endif
// Cannot rename a file to the name of an existing directory.
ec.clear();
@@ -155,7 +159,7 @@ test_directories()
VERIFY( is_directory(dir/"subdir2") );
VERIFY( is_regular_file(dir/"subdir2/file") );
-#if defined(__MINGW32__) || defined(__MINGW64__)
+#if defined(__MINGW32__) || defined(__MINGW64__) || defined(__rtems__)
// Cannot rename a directory to an existing directory
#else
// Can rename a non-empty directory to the name of an empty directory.
@@ -125,11 +125,15 @@ test_directories()
VERIFY( is_directory(dir/"subdir2") );
VERIFY( !exists(dir/"subdir") );
+#ifdef __rtems__
+ // Can rename a directory to a sub-directory of itself?!?
+#else
// Cannot rename a directory to a sub-directory of itself.
fs::rename(dir/"subdir2", dir/"subdir2/subsubdir", ec);
VERIFY( ec );
VERIFY( is_directory(dir/"subdir2") );
VERIFY( !exists(dir/"subdir2"/"subsubdir") );
+#endif
// Cannot rename a file to the name of an existing directory.
ec.clear();
@@ -158,6 +162,9 @@ test_directories()
VERIFY( is_directory(dir/"subdir2") );
VERIFY( is_regular_file(dir/"subdir2/file") );
+#ifdef __rtems__
+ // Cannot rename a directory to an existing directory
+#else
// Can rename a non-empty directory to the name of an empty directory.
ec = bad_ec;
fs::rename(dir/"subdir2", dir/"subdir", ec);
@@ -165,10 +172,12 @@ test_directories()
VERIFY( is_directory(dir/"subdir") );
VERIFY( !exists(dir/"subdir2") );
VERIFY( is_regular_file(dir/"subdir/file") );
+#endif
+
f2.path.clear();
+#endif
f.path.clear();
-#endif
fs::remove_all(dir, ec);
}