[libcxx] r322293 - Make std::experimental::filesystem::remove and remove_all return false or 0 if the file doesn't exist

2018-01-11 Thread Ekaterina Vaartis via cfe-commits
Author: vaartis
Date: Thu Jan 11 09:04:29 2018
New Revision: 322293

URL: http://llvm.org/viewvc/llvm-project?rev=322293&view=rev
Log:
Make std::experimental::filesystem::remove and remove_all return false or 0 if 
the file doesn't exist

Differential Revision: https://reviews.llvm.org/D41830


Modified:
libcxx/trunk/src/experimental/filesystem/operations.cpp

libcxx/trunk/test/std/experimental/filesystem/fs.op.funcs/fs.op.remove/remove.pass.cpp

libcxx/trunk/test/std/experimental/filesystem/fs.op.funcs/fs.op.remove_all/remove_all.pass.cpp

Modified: libcxx/trunk/src/experimental/filesystem/operations.cpp
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/experimental/filesystem/operations.cpp?rev=322293&r1=322292&r2=322293&view=diff
==
--- libcxx/trunk/src/experimental/filesystem/operations.cpp (original)
+++ libcxx/trunk/src/experimental/filesystem/operations.cpp Thu Jan 11 09:04:29 
2018
@@ -661,8 +661,10 @@ path __read_symlink(const path& p, std::
 
 bool __remove(const path& p, std::error_code *ec) {
 if (ec) ec->clear();
+
 if (::remove(p.c_str()) == -1) {
-set_or_throw(ec, "remove", p);
+if (errno != ENOENT)
+set_or_throw(ec, "remove", p);
 return false;
 }
 return true;
@@ -692,13 +694,18 @@ std::uintmax_t remove_all_impl(path cons
 } // end namespace
 
 std::uintmax_t __remove_all(const path& p, std::error_code *ec) {
+if (ec) ec->clear();
+
 std::error_code mec;
 auto count = remove_all_impl(p, mec);
 if (mec) {
-set_or_throw(mec, ec, "remove_all", p);
-return static_cast(-1);
+if (mec == errc::no_such_file_or_directory) {
+return 0;
+} else {
+set_or_throw(mec, ec, "remove_all", p);
+return static_cast(-1);
+}
 }
-if (ec) ec->clear();
 return count;
 }
 

Modified: 
libcxx/trunk/test/std/experimental/filesystem/fs.op.funcs/fs.op.remove/remove.pass.cpp
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/experimental/filesystem/fs.op.funcs/fs.op.remove/remove.pass.cpp?rev=322293&r1=322292&r2=322293&view=diff
==
--- 
libcxx/trunk/test/std/experimental/filesystem/fs.op.funcs/fs.op.remove/remove.pass.cpp
 (original)
+++ 
libcxx/trunk/test/std/experimental/filesystem/fs.op.funcs/fs.op.remove/remove.pass.cpp
 Thu Jan 11 09:04:29 2018
@@ -61,17 +61,29 @@ TEST_CASE(test_error_reporting)
 const path file_in_bad_dir = env.create_file(bad_perms_dir / "file", 42);
 permissions(bad_perms_dir, perms::none);
 const path testCases[] = {
-"",
-env.make_env_path("dne"),
 non_empty_dir,
 file_in_bad_dir,
 };
 for (auto& p : testCases) {
 std::error_code ec;
+
 TEST_CHECK(!fs::remove(p, ec));
 TEST_CHECK(ec);
 TEST_CHECK(checkThrow(p, ec));
 }
+
+// PR#35780
+const path testCasesNonexistant[] = {
+"",
+env.make_env_path("dne")
+};
+
+for (auto& p : testCasesNonexistant) {
+std::error_code ec;
+
+TEST_CHECK(!fs::remove(p, ec));
+TEST_CHECK(!ec);
+}
 }
 
 TEST_CASE(basic_remove_test)

Modified: 
libcxx/trunk/test/std/experimental/filesystem/fs.op.funcs/fs.op.remove_all/remove_all.pass.cpp
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/experimental/filesystem/fs.op.funcs/fs.op.remove_all/remove_all.pass.cpp?rev=322293&r1=322292&r2=322293&view=diff
==
--- 
libcxx/trunk/test/std/experimental/filesystem/fs.op.funcs/fs.op.remove_all/remove_all.pass.cpp
 (original)
+++ 
libcxx/trunk/test/std/experimental/filesystem/fs.op.funcs/fs.op.remove_all/remove_all.pass.cpp
 Thu Jan 11 09:04:29 2018
@@ -64,16 +64,28 @@ TEST_CASE(test_error_reporting)
 permissions(bad_perms_file, perms::none);
 
 const path testCases[] = {
-env.make_env_path("dne"),
 file_in_bad_dir
 };
 const auto BadRet = static_cast(-1);
 for (auto& p : testCases) {
 std::error_code ec;
+
 TEST_CHECK(fs::remove_all(p, ec) == BadRet);
 TEST_CHECK(ec);
 TEST_CHECK(checkThrow(p, ec));
 }
+
+// PR#35780
+const path testCasesNonexistant[] = {
+"",
+env.make_env_path("dne")
+};
+for (auto &p : testCasesNonexistant) {
+std::error_code ec;
+
+TEST_CHECK(fs::remove_all(p) == 0);
+TEST_CHECK(!ec);
+}
 }
 
 TEST_CASE(basic_remove_all_test)


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[libcxx] r322351 - Add error code handling to remove_all test

2018-01-11 Thread Ekaterina Vaartis via cfe-commits
Author: vaartis
Date: Thu Jan 11 21:02:06 2018
New Revision: 322351

URL: http://llvm.org/viewvc/llvm-project?rev=322351&view=rev
Log:
Add error code handling to remove_all test

As mentioned by EricWF in revision D41830


Modified:

libcxx/trunk/test/std/experimental/filesystem/fs.op.funcs/fs.op.remove_all/remove_all.pass.cpp

Modified: 
libcxx/trunk/test/std/experimental/filesystem/fs.op.funcs/fs.op.remove_all/remove_all.pass.cpp
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/experimental/filesystem/fs.op.funcs/fs.op.remove_all/remove_all.pass.cpp?rev=322351&r1=322350&r2=322351&view=diff
==
--- 
libcxx/trunk/test/std/experimental/filesystem/fs.op.funcs/fs.op.remove_all/remove_all.pass.cpp
 (original)
+++ 
libcxx/trunk/test/std/experimental/filesystem/fs.op.funcs/fs.op.remove_all/remove_all.pass.cpp
 Thu Jan 11 21:02:06 2018
@@ -83,7 +83,7 @@ TEST_CASE(test_error_reporting)
 for (auto &p : testCasesNonexistant) {
 std::error_code ec;
 
-TEST_CHECK(fs::remove_all(p) == 0);
+TEST_CHECK(fs::remove_all(p, ec) == 0);
 TEST_CHECK(!ec);
 }
 }


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits