[libcxx-commits] [PATCH] D108326: [SystemZ][z/OS] Fix handling of dirs with filesystem tests

Muiez Ahmed via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Wed Aug 18 12:54:23 PDT 2021


muiez created this revision.
muiez added a reviewer: libc++.
muiez requested review of this revision.
Herald added a project: libc++.
Herald added a subscriber: libcxx-commits.
Herald added 1 blocking reviewer(s): libc++.

The aim of this patch is to fix the post processing that is happening on the temporary test directories upon scope exit. In particular, ~scoped_test_env aims to chmod and remove the temporary directories; however,

- bad symlinks are followed and we get "No such file or directory". FIX: use find as alternative to chmod and avoid -follow option.
- Attempting to remove read-only files on z/OS prompts a message asking for confirmation. FIX: use the -f option to delete read-only files immediately without asking for confirmation.
- Some libcxx tests such as `libcxx/test/std/input.output/filesystems/cl ass.directory_entry/directory_entry.cons/path.pass.cpp` set the dir permissions to none. In turn, recursively doing chmod (-R) does not set the file permissions needed to be able to remove the dir on z/OS only. FIX: use find as alternative to chmod -R, which does not run into this issue on z/OS.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D108326

Files:
  libcxx/test/support/filesystem_test_helper.h


Index: libcxx/test/support/filesystem_test_helper.h
===================================================================
--- libcxx/test/support/filesystem_test_helper.h
+++ libcxx/test/support/filesystem_test_helper.h
@@ -138,12 +138,18 @@
         std::string cmd = "rmdir /s /q " + test_root.string();
         int ret = std::system(cmd.c_str());
         assert(ret == 0);
+#else 
+#if defined(__MVS__)
+        // The behaviour of chmod -R on z/OS prevents recursive 
+        // permission change for directories that do not have read permission.
+        std::string cmd = "find  " + test_root.string() + " -exec chmod 777 {} \\;";
 #else
         std::string cmd = "chmod -R 777 " + test_root.string();
+#endif // defined(__MVS__)
         int ret = std::system(cmd.c_str());
         assert(ret == 0);
 
-        cmd = "rm -r " + test_root.string();
+        cmd = "rm -rf " + test_root.string();
         ret = std::system(cmd.c_str());
         assert(ret == 0);
 #endif


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D108326.367310.patch
Type: text/x-patch
Size: 981 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20210818/1d34647a/attachment.bin>


More information about the libcxx-commits mailing list