Remove last cleanup from linux-namespaces.c
authorTom Tromey <tom@tromey.com>
Thu, 24 Jan 2019 13:43:45 +0000 (06:43 -0700)
committerTom Tromey <tom@tromey.com>
Wed, 6 Mar 2019 23:04:31 +0000 (16:04 -0700)
This removes the last cleanup from linux-namespaces.c, replacing it
with a use of SCOPE_EXIT.

2019-03-06  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
gdb/common/filestuff.c
gdb/common/filestuff.h
gdb/nat/linux-namespaces.c

index 0dc54e7eb383a22f0dd0ec0a61c5fe22c0b968c5..e4f7b86f7f87ecfc067f06aca35a33159b913d41 100644 (file)
@@ -1,3 +1,10 @@
+2019-03-06  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.
+
 2019-03-06  Tom Tromey  <tom@tromey.com>
 
        * solib-aix.c: Use make_scope_exit.
index 0d2fa8d6336fecd3d85cd333faa2e75e51984e6f..1ca62482a7e27a5c9da4a63bba463c0a59d2ba3d 100644 (file)
@@ -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
index 7e95b9ca2d4e76632540e3e9ad0afacd2a2b1c8e..c50781da01c23c4d7711ee4db880232087ec70be 100644 (file)
@@ -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
index 812f8c197671dc71f260b200f07f29ad49b79264..c0f326b9a1eda321d53f0faace0e6f87309ba3e9 100644 (file)
@@ -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.  */