From 4b386db09235e8efc76063ca59eca7d3323b5498 Mon Sep 17 00:00:00 2001 From: Ville Voutilainen Date: Mon, 4 Jul 2016 16:52:21 +0300 Subject: [PATCH] backport: re PR libstdc++/71313 ([Filesystem TS] remove_all fails to remove directory contents recursively) Backport from mainline 2016-07-04 Ville Voutilainen PR libstdc++/71313 * src/filesystem/ops.cc (remove_all(const path&, error_code&)): Call remove_all for children of a directory. * testsuite/experimental/filesystem/operations/create_directories.cc: Adjust. From-SVN: r237981 --- libstdc++-v3/ChangeLog | 11 +++++++++++ libstdc++-v3/src/filesystem/ops.cc | 2 +- .../filesystem/operations/create_directories.cc | 3 ++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 58373fde82df..d1509b4e1348 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,14 @@ +2016-07-04 Ville Voutilainen + + Backport from mainline + 2016-07-04 Ville Voutilainen + + PR libstdc++/71313 + * src/filesystem/ops.cc (remove_all(const path&, error_code&)): + Call remove_all for children of a directory. + * testsuite/experimental/filesystem/operations/create_directories.cc: + Adjust. + 2016-06-03 Release Manager * GCC 5.4.0 released. diff --git a/libstdc++-v3/src/filesystem/ops.cc b/libstdc++-v3/src/filesystem/ops.cc index 0f09cebf0502..701489056392 100644 --- a/libstdc++-v3/src/filesystem/ops.cc +++ b/libstdc++-v3/src/filesystem/ops.cc @@ -1172,7 +1172,7 @@ fs::remove_all(const path& p, error_code& ec) noexcept uintmax_t count = 0; if (ec.value() == 0 && fs.type() == file_type::directory) for (directory_iterator d(p, ec), end; ec.value() == 0 && d != end; ++d) - count += fs::remove(d->path(), ec); + count += fs::remove_all(d->path(), ec); if (ec.value()) return -1; return fs::remove(p, ec) ? ++count : -1; // fs:remove() calls ec.clear() diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc index b84d966ad744..8e4dea8a2ebc 100644 --- a/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc +++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc @@ -65,7 +65,8 @@ test01() VERIFY( b ); VERIFY( is_directory(p/"./d4/../d5") ); - remove_all(p, ec); + std::uintmax_t count = remove_all(p, ec); + VERIFY( count == 6 ); } int