[PATCH 09/20] Remove last cleanup from linux-namespaces.c

Tom Tromey tom@tromey.com
Wed Feb 13 21:30:00 GMT 2019


This removes the last cleanup from linux-namespaces.c, replacing it
with a use of SCOPE_EXIT.

gdb/ChangeLog
2019-02-13  Tom Tromey  <tom@tromey.com>

	* nat/linux-namespaces.c (linux_mntns_access_fs): Use SCOPE_EXIT.
	* common/filestuff.h (make_cleanup_close): Don't declare.
	* common/filestuff.c (do_close_cleanup, make_cleanup_close):
	Remove.
---
 gdb/ChangeLog              |  7 +++++++
 gdb/common/filestuff.c     | 21 -------------------
 gdb/common/filestuff.h     |  4 ----
 gdb/nat/linux-namespaces.c | 41 ++++++++++++++------------------------
 4 files changed, 22 insertions(+), 51 deletions(-)

diff --git a/gdb/common/filestuff.c b/gdb/common/filestuff.c
index 0d2fa8d6336..1ca62482a7e 100644
--- a/gdb/common/filestuff.c
+++ b/gdb/common/filestuff.c
@@ -426,27 +426,6 @@ gdb_pipe_cloexec (int filedes[2])
   return result;
 }
 
-/* Helper function which does the work for make_cleanup_close.  */
-
-static void
-do_close_cleanup (void *arg)
-{
-  int *fd = (int *) arg;
-
-  close (*fd);
-}
-
-/* See filestuff.h.  */
-
-struct cleanup *
-make_cleanup_close (int fd)
-{
-  int *saved_fd = XNEW (int);
-
-  *saved_fd = fd;
-  return make_cleanup_dtor (do_close_cleanup, saved_fd, xfree);
-}
-
 /* See common/filestuff.h.  */
 
 bool
diff --git a/gdb/common/filestuff.h b/gdb/common/filestuff.h
index 7e95b9ca2d4..c50781da01c 100644
--- a/gdb/common/filestuff.h
+++ b/gdb/common/filestuff.h
@@ -112,10 +112,6 @@ extern int gdb_socket_cloexec (int domain, int style, int protocol);
 
 extern int gdb_pipe_cloexec (int filedes[2]);
 
-/* Return a new cleanup that closes FD.  */
-
-extern struct cleanup *make_cleanup_close (int fd);
-
 struct gdb_dir_deleter
 {
   void operator() (DIR *dir) const
diff --git a/gdb/nat/linux-namespaces.c b/gdb/nat/linux-namespaces.c
index 812f8c19767..c0f326b9a1e 100644
--- a/gdb/nat/linux-namespaces.c
+++ b/gdb/nat/linux-namespaces.c
@@ -28,6 +28,7 @@
 #include "common/gdb_wait.h"
 #include <signal.h>
 #include <sched.h>
+#include "common/scope-exit.h"
 
 /* See nat/linux-namespaces.h.  */
 int debug_linux_namespaces;
@@ -887,12 +888,11 @@ enum mnsh_fs_code
 static enum mnsh_fs_code
 linux_mntns_access_fs (pid_t pid)
 {
-  struct cleanup *old_chain;
   struct linux_ns *ns;
   struct stat sb;
   struct linux_mnsh *helper;
   ssize_t size;
-  int fd, saved_errno;
+  int fd;
 
   if (pid == getpid ())
     return MNSH_FS_DIRECT;
@@ -901,27 +901,26 @@ linux_mntns_access_fs (pid_t pid)
   if (ns == NULL)
     return MNSH_FS_DIRECT;
 
-  old_chain = make_cleanup (null_cleanup, NULL);
-
   fd = gdb_open_cloexec (linux_ns_filename (ns, pid), O_RDONLY, 0);
   if (fd < 0)
-    goto error;
+    return MNSH_FS_ERROR;
 
-  make_cleanup_close (fd);
+  SCOPE_EXIT
+    {
+      int save_errno = errno;
+      close (fd);
+      errno = save_errno;
+    };
 
   if (fstat (fd, &sb) != 0)
-    goto error;
+    return MNSH_FS_ERROR;
 
   if (sb.st_ino == ns->id)
-    {
-      do_cleanups (old_chain);
-
-      return MNSH_FS_DIRECT;
-    }
+    return MNSH_FS_DIRECT;
 
   helper = linux_mntns_get_helper ();
   if (helper == NULL)
-    goto error;
+    return MNSH_FS_ERROR;
 
   if (sb.st_ino != helper->nsid)
     {
@@ -929,10 +928,10 @@ linux_mntns_access_fs (pid_t pid)
 
       size = mnsh_send_setns (helper, fd, 0);
       if (size < 0)
-	goto error;
+	return MNSH_FS_ERROR;
 
       if (mnsh_recv_int (helper, &result, &error) != 0)
-	goto error;
+	return MNSH_FS_ERROR;
 
       if (result != 0)
 	{
@@ -945,23 +944,13 @@ linux_mntns_access_fs (pid_t pid)
 	    error = ENOTSUP;
 
 	  errno = error;
-	  goto error;
+	  return MNSH_FS_ERROR;
 	}
 
       helper->nsid = sb.st_ino;
     }
 
-  do_cleanups (old_chain);
-
   return MNSH_FS_HELPER;
-
-error:
-  saved_errno = errno;
-
-  do_cleanups (old_chain);
-
-  errno = saved_errno;
-  return MNSH_FS_ERROR;
 }
 
 /* See nat/linux-namespaces.h.  */
-- 
2.17.2



More information about the Gdb-patches mailing list