diff --git a/include/ghc/filesystem.hpp b/include/ghc/filesystem.hpp index 4924c73..34bd9bb 100644 --- a/include/ghc/filesystem.hpp +++ b/include/ghc/filesystem.hpp @@ -4740,7 +4740,7 @@ GHC_INLINE uintmax_t remove_all(const path& p, std::error_code& ec) noexcept return static_cast(-1); } std::error_code tec; - auto fs = status(p, tec); + auto fs = symlink_status(p, tec); if (exists(fs) && is_directory(fs)) { for (auto iter = directory_iterator(p, ec); iter != directory_iterator(); iter.increment(ec)) { if (ec && !detail::is_not_found_error(ec)) { diff --git a/test/filesystem_test.cpp b/test/filesystem_test.cpp index 0eb5b81..7fdd0a5 100644 --- a/test/filesystem_test.cpp +++ b/test/filesystem_test.cpp @@ -2607,6 +2607,10 @@ TEST_CASE("fs.op.remove_all - remove_all", "[filesystem][operations][fs.op.remov CHECK_NOTHROW(fs::remove_all("dir1/non-existing", ec)); CHECK(!ec); CHECK(fs::remove_all("dir1/non-existing", ec) == 0); + if (is_symlink_creation_supported()) { + fs::create_directory_symlink("dir1", "dir1link"); + CHECK(fs::remove_all("dir1link") == 1); + } CHECK(fs::remove_all("dir1") == 5); CHECK(fs::directory_iterator(t.path()) == fs::directory_iterator()); }