gdb/ChangeLog 2014-12-17 Jan Kratochvil * compile/compile.c: Include ftw.h. (do_rmdir_fn): New function. (do_rmdir): Call nftw with it. diff --git a/gdb/compile/compile.c b/gdb/compile/compile.c index 414fc35..7dbc819 100644 --- a/gdb/compile/compile.c +++ b/gdb/compile/compile.c @@ -37,6 +37,7 @@ #include "filestuff.h" #include "target.h" #include "osabi.h" +#include @@ -162,17 +163,42 @@ compile_code_command (char *arg, int from_tty) do_cleanups (cleanup); } +/* Helper for do_rmdir. */ + +static int +do_rmdir_fn (const char *fpath, const struct stat *sb, int typeflag, + struct FTW *ftwbuf) +{ + switch (typeflag) + { + case FTW_DP: + if (rmdir (fpath) != 0) + warning (_("Cannot remove 'compile' command directory \"%s\": %s"), + fpath, safe_strerror (errno)); + break; + case FTW_F: + if (unlink (fpath) != 0) + warning (_("Cannot remove 'compile' command file \"%s\": %s"), + fpath, safe_strerror (errno)); + break; + default: + warning (_("Unknown 'typeflag' %d for 'compile' command file \"%s\"."), + typeflag, fpath); + } + + /* Continue the walk. */ + return 0; +} + /* A cleanup function to remove a directory and all its contents. */ static void do_rmdir (void *arg) { const char *dir = arg; - char *zap; - + gdb_assert (strncmp (dir, TMP_PREFIX, strlen (TMP_PREFIX)) == 0); - zap = concat ("rm -rf ", dir, (char *) NULL); - system (zap); + nftw (dir, do_rmdir_fn, 10, FTW_DEPTH | FTW_MOUNT | FTW_PHYS); } /* Return the name of the temporary directory to use for .o files, and