From add101f978e52c0d081375bc457085b0e190f2ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Thu, 23 Nov 2023 14:45:31 -0500 Subject: [PATCH] fileutils: catch exceptions in removeAll Change-Id: Ia0c3c975961bf96c6db80ed8f5c7b45bdee7e9cb --- src/fileutils.cpp | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/fileutils.cpp b/src/fileutils.cpp index 6c75ef5..f700ddb 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -336,21 +336,26 @@ remove(const std::filesystem::path& path, bool erase) int removeAll(const std::filesystem::path& path, bool erase) { - std::error_code ec; - if (not erase) { - std::filesystem::remove_all(path, ec); - return ec.value(); - } - if (path.empty()) - return -1; - - auto status = std::filesystem::status(path, ec); - if (!ec && std::filesystem::is_directory(status) and not std::filesystem::is_symlink(status)) { - for (const auto& entry: std::filesystem::directory_iterator(path, ec)) { - removeAll(entry.path(), erase); + try { + std::error_code ec; + if (not erase) { + std::filesystem::remove_all(path, ec); + return ec.value(); + } + if (path.empty()) + return -1; + + auto status = std::filesystem::status(path, ec); + if (!ec && std::filesystem::is_directory(status) and not std::filesystem::is_symlink(status)) { + for (const auto& entry: std::filesystem::directory_iterator(path, ec)) { + removeAll(entry.path(), erase); + } } + return remove(path, erase); + } catch (const std::exception& e) { + //JAMI_ERR("Error while removing %s: %s", path.c_str(), e.what()); + return -1; } - return remove(path, erase); } void -- GitLab