From 339cf0bd65904a22ca59db19c2e8854e2b55d79b Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Tue, 17 Mar 2026 08:59:29 +0200 Subject: [PATCH] mu-utils-file: use std::filesystem::remove_all Instead of the hacky "rm -rf" --- lib/utils/mu-utils-file.cc | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/lib/utils/mu-utils-file.cc b/lib/utils/mu-utils-file.cc index 3da9751c..ff3a7c97 100644 --- a/lib/utils/mu-utils-file.cc +++ b/lib/utils/mu-utils-file.cc @@ -29,6 +29,8 @@ #include #include +#include + #ifdef HAVE_WORDEXP_H #include #endif /*HAVE_WORDEXP_H*/ @@ -124,22 +126,13 @@ Mu::remove_directory(const std::string& path) if (!check_dir(path, false, true)) return Err(Error::Code::File, "not a writable directory: {}", path); - // ugly: g_spawn wants gchar** - std::array argv = { g_find_program_in_path("rm"), - g_strdup("-r"), g_strdup(path.c_str()), {}}; - if (!argv[0]) { - std::for_each(argv.begin(), argv.end(), g_free); - return Err(Error::Code::File, "cannot find 'rm' in path"); - } + std::error_code err{}; + const auto n{std::filesystem::remove_all(path, err)}; + if (err) + return Err(Error::Code::File, "failed to remove {}; exit-code={}", + path, err.value()); - GError *err{}; - int status{}; - const auto res = g_spawn_sync({}, argv.data(), {}, {}, {}, {}, {}, {}, &status, &err); - std::for_each(argv.begin(), argv.end(), g_free); - if (!res) - return Err(Error::Code::File, &err, "failed to remove {}; exit-code={}", path, status); - - mu_debug("removed directory '{}'", path); + mu_debug("removed directory '{}' ({})", path, n); return Ok(); }