aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLancelot SIX <lancelot.six@amd.com>2024-03-03 16:47:56 +0000
committerLancelot SIX <lancelot.six@amd.com>2024-04-03 13:53:32 +0100
commit7bba0ad08576309763e3f41193eaa93025e10b8b (patch)
tree3a249f6b216f88896644ebbfa4515891a212cd28
parente73b04d26504214f52a3b87f51917d26aba8e82c (diff)
downloadgdb-7bba0ad08576309763e3f41193eaa93025e10b8b.zip
gdb-7bba0ad08576309763e3f41193eaa93025e10b8b.tar.gz
gdb-7bba0ad08576309763e3f41193eaa93025e10b8b.tar.bz2
gdb/compile: Use std::filesystem::remove_all in cleanup
In a previous review, I noticed that some code in gdb/compile/compile.c could use c++17's `std::filesystem::remove_all` instead of using some `system ("rm -rf ...");`. This patch implements this. Note that I use the noexcept overload of std::filesystem::remove_all and explicitly check for an error code. This means that this code called during the cleanup procedure cannot throw, and does not risk preventing other cleanup functions to be called. Tested on x86_64-linux. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31420 Change-Id: If5668bf3e15e66c020e5c3b4fa999f861690e4cf Approved-By: Tom Tromey <tom@tromey.com>
-rw-r--r--gdb/compile/compile.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/gdb/compile/compile.c b/gdb/compile/compile.c
index 2d97a1b..bff69a5 100644
--- a/gdb/compile/compile.c
+++ b/gdb/compile/compile.c
@@ -39,7 +39,9 @@
#include "osabi.h"
#include "gdbsupport/gdb_wait.h"
#include "valprint.h"
+#include <filesystem>
#include <optional>
+#include <system_error>
#include "gdbsupport/gdb_unlinker.h"
#include "gdbsupport/pathstuff.h"
#include "gdbsupport/scoped_ignore_signal.h"
@@ -449,15 +451,11 @@ get_compile_file_tempdir (void)
tempdir_name = xstrdup (tempdir_name);
add_final_cleanup ([] ()
{
- char *zap;
- int wstat;
-
- gdb_assert (startswith (tempdir_name, TMP_PREFIX));
- zap = concat ("rm -rf ", tempdir_name, (char *) NULL);
- wstat = system (zap);
- if (wstat == -1 || !WIFEXITED (wstat) || WEXITSTATUS (wstat) != 0)
- warning (_("Could not remove temporary directory %s"), tempdir_name);
- XDELETEVEC (zap);
+ std::error_code error;
+ if (std::filesystem::remove_all (tempdir_name, error)
+ == static_cast<std::uintmax_t> (-1))
+ warning (_("Could not remove temporary directory %s (%s)"),
+ tempdir_name, error.message ().c_str ());
});
return tempdir_name;
}