aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2018-05-03 00:18:20 -0600
committerTom Tromey <tom@tromey.com>2018-05-04 12:20:37 -0600
commitf0b3976bdcd29e308bed185630a24806037a717c (patch)
tree9cb329df8ee78f419c7c0e4dec46db0c9d28f69c /gdb
parent862d101ada6b6e8496e545c0bcd801cf8b9a46c1 (diff)
downloadbinutils-f0b3976bdcd29e308bed185630a24806037a717c.zip
binutils-f0b3976bdcd29e308bed185630a24806037a717c.tar.gz
binutils-f0b3976bdcd29e308bed185630a24806037a717c.tar.bz2
Remove do_closedir_cleanup
This removes both copies of do_closedir_cleanup in favor of a new unique_ptr specialization. Tested by the buildbot, though I'm not sure that these code paths are exercised there. ChangeLog 2018-05-04 Tom Tromey <tom@tromey.com> * nto-procfs.c (do_closedir_cleanup): Remove. (procfs_pidlist): Use gdb_dir_up. * procfs.c (do_closedir_cleanup): Remove. (proc_update_threads): Use gdb_dir_up. * common/filestuff.h (struct gdb_dir_deleter): New. (gdb_dir_up): New typedef.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/common/filestuff.h14
-rw-r--r--gdb/nto-procfs.c24
-rw-r--r--gdb/procfs.c16
4 files changed, 31 insertions, 32 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 730a357..60079a1 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,14 @@
2018-05-04 Tom Tromey <tom@tromey.com>
+ * nto-procfs.c (do_closedir_cleanup): Remove.
+ (procfs_pidlist): Use gdb_dir_up.
+ * procfs.c (do_closedir_cleanup): Remove.
+ (proc_update_threads): Use gdb_dir_up.
+ * common/filestuff.h (struct gdb_dir_deleter): New.
+ (gdb_dir_up): New typedef.
+
+2018-05-04 Tom Tromey <tom@tromey.com>
+
* ada-lang.c (print_mention_exception): Use std::string.
2018-05-04 Tom Tromey <tom@tromey.com>
diff --git a/gdb/common/filestuff.h b/gdb/common/filestuff.h
index 92a2a5f..0e46eb5 100644
--- a/gdb/common/filestuff.h
+++ b/gdb/common/filestuff.h
@@ -19,6 +19,8 @@
#ifndef FILESTUFF_H
#define FILESTUFF_H
+#include <dirent.h>
+
/* Note all the file descriptors which are open when this is called.
These file descriptors will not be closed by close_most_fds. */
@@ -84,4 +86,16 @@ extern int gdb_pipe_cloexec (int filedes[2]);
extern struct cleanup *make_cleanup_close (int fd);
+struct gdb_dir_deleter
+{
+ void operator() (DIR *dir) const
+ {
+ closedir (dir);
+ }
+};
+
+/* A unique pointer to a DIR. */
+
+typedef std::unique_ptr<DIR, gdb_dir_deleter> gdb_dir_up;
+
#endif /* FILESTUFF_H */
diff --git a/gdb/nto-procfs.c b/gdb/nto-procfs.c
index 51559e6..f0ef9b9 100644
--- a/gdb/nto-procfs.c
+++ b/gdb/nto-procfs.c
@@ -424,15 +424,8 @@ nto_procfs_target::update_thread_list ()
}
static void
-do_closedir_cleanup (void *dir)
-{
- closedir (dir);
-}
-
-static void
procfs_pidlist (const char *args, int from_tty)
{
- DIR *dp = NULL;
struct dirent *dirp = NULL;
char buf[PATH_MAX];
procfs_info *pidinfo = NULL;
@@ -441,13 +434,12 @@ procfs_pidlist (const char *args, int from_tty)
pid_t num_threads = 0;
pid_t pid;
char name[512];
- struct cleanup *cleanups;
char procfs_dir[PATH_MAX];
snprintf (procfs_dir, sizeof (procfs_dir), "%s%s",
(nodestr != NULL) ? nodestr : "", "/proc");
- dp = opendir (procfs_dir);
+ gdb_dir_up dp (opendir (procfs_dir));
if (dp == NULL)
{
fprintf_unfiltered (gdb_stderr, "failed to opendir \"%s\" - %d (%s)",
@@ -455,22 +447,17 @@ procfs_pidlist (const char *args, int from_tty)
return;
}
- cleanups = make_cleanup (do_closedir_cleanup, dp);
-
/* Start scan at first pid. */
- rewinddir (dp);
+ rewinddir (dp.get ());
do
{
/* Get the right pid and procfs path for the pid. */
do
{
- dirp = readdir (dp);
+ dirp = readdir (dp.get ());
if (dirp == NULL)
- {
- do_cleanups (cleanups);
- return;
- }
+ return;
snprintf (buf, sizeof (buf), "%s%s/%s/as",
(nodestr != NULL) ? nodestr : "",
"/proc", dirp->d_name);
@@ -521,9 +508,6 @@ procfs_pidlist (const char *args, int from_tty)
}
}
while (dirp != NULL);
-
- do_cleanups (cleanups);
- return;
}
static void
diff --git a/gdb/procfs.c b/gdb/procfs.c
index 749b2b4..70619f1 100644
--- a/gdb/procfs.c
+++ b/gdb/procfs.c
@@ -1722,20 +1722,13 @@ proc_delete_dead_threads (procinfo *parent, procinfo *thread, void *ignore)
return 0; /* keep iterating */
}
-static void
-do_closedir_cleanup (void *dir)
-{
- closedir ((DIR *) dir);
-}
-
static int
proc_update_threads (procinfo *pi)
{
char pathname[MAX_PROC_NAME_SIZE + 16];
struct dirent *direntry;
- struct cleanup *old_chain = NULL;
procinfo *thread;
- DIR *dirp;
+ gdb_dir_up dirp;
int lwpid;
/* We should never have to apply this operation to any procinfo
@@ -1756,11 +1749,11 @@ proc_update_threads (procinfo *pi)
strcpy (pathname, pi->pathname);
strcat (pathname, "/lwp");
- if ((dirp = opendir (pathname)) == NULL)
+ dirp.reset (opendir (pathname));
+ if (dirp == NULL)
proc_error (pi, "update_threads, opendir", __LINE__);
- old_chain = make_cleanup (do_closedir_cleanup, dirp);
- while ((direntry = readdir (dirp)) != NULL)
+ while ((direntry = readdir (dirp.get ())) != NULL)
if (direntry->d_name[0] != '.') /* skip '.' and '..' */
{
lwpid = atoi (&direntry->d_name[0]);
@@ -1768,7 +1761,6 @@ proc_update_threads (procinfo *pi)
proc_error (pi, "update_threads, create_procinfo", __LINE__);
}
pi->threads_valid = 1;
- do_cleanups (old_chain);
return 1;
}