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