gdbsupport: make gdb_mkostemp_cloexec return a scoped_fd
authorSimon Marchi <simon.marchi@polymtl.ca>
Thu, 22 Jul 2021 19:33:42 +0000 (15:33 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Thu, 30 Sep 2021 19:21:48 +0000 (15:21 -0400)
This encourages the callers to use automatic file descriptor management.

Change-Id: I137a81df6f3607b457e28c35aafde8ed6f3a3344

gdb/darwin-nat.c
gdb/dwarf2/index-write.c
gdb/unittests/scoped_fd-selftests.c
gdb/unittests/scoped_mmap-selftests.c
gdbsupport/filestuff.h

index 525f59ae2ceae58ccb844e9ee9d118ad3c53737c..141eede11fe250a63806533070fed7b7366574fc 100644 (file)
@@ -1833,7 +1833,7 @@ copy_shell_to_cache (const char *shell, const std::string &new_name)
           new_dir.c_str (), safe_strerror (errno));
 
   gdb::char_vector temp_name = make_temp_filename (new_name);
-  scoped_fd to_fd (gdb_mkostemp_cloexec (&temp_name[0]));
+  scoped_fd to_fd = gdb_mkostemp_cloexec (&temp_name[0]);
   gdb::unlinker unlink_file_on_error (temp_name.data ());
 
   if (to_fd.get () < 0)
index 0318b7a81b23c5f05192f4f1c235d90710111a92..e92def7590bfab75c9087dba636eb9afe5e06b8a 100644 (file)
@@ -1538,8 +1538,8 @@ struct index_wip_file
 
     filename_temp = make_temp_filename (filename);
 
-    scoped_fd out_file_fd (gdb_mkostemp_cloexec (filename_temp.data (),
-                                                O_BINARY));
+    scoped_fd out_file_fd gdb_mkostemp_cloexec (filename_temp.data (),
+                                                 O_BINARY);
     if (out_file_fd.get () == -1)
       perror_with_name (("mkstemp"));
 
index d1803aaf8da2dfe25dcdf3715b3286dafda31540..ff8d093794f51fdc389c59ca514d6277ae8f291c 100644 (file)
@@ -32,7 +32,7 @@ static void
 test_destroy ()
 {
   char filename[] = "scoped_fd-selftest-XXXXXX";
-  int fd = gdb_mkostemp_cloexec (filename);
+  int fd = gdb_mkostemp_cloexec (filename).release ();
   SELF_CHECK (fd >= 0);
 
   unlink (filename);
@@ -51,7 +51,7 @@ static void
 test_release ()
 {
   char filename[] = "scoped_fd-selftest-XXXXXX";
-  int fd = gdb_mkostemp_cloexec (filename);
+  int fd = gdb_mkostemp_cloexec (filename).release ();
   SELF_CHECK (fd >= 0);
 
   unlink (filename);
@@ -71,7 +71,7 @@ test_to_file ()
 {
   char filename[] = "scoped_fd-selftest-XXXXXX";
 
-  ::scoped_fd sfd (gdb_mkostemp_cloexec (filename));
+  ::scoped_fd sfd = gdb_mkostemp_cloexec (filename);
   SELF_CHECK (sfd.get () >= 0);
 
   unlink (filename);
index 92a821d14b314a7b1049f601b6e71ed716000539..76d6c417ad05599d7591b986027a6957638578e5 100644 (file)
@@ -89,11 +89,12 @@ static void
 test_normal ()
 {
   char filename[] = "scoped_mmapped_file-selftest-XXXXXX";
-  int fd = gdb_mkostemp_cloexec (filename);
-  SELF_CHECK (fd >= 0);
+  {
+    scoped_fd fd = gdb_mkostemp_cloexec (filename);
+    SELF_CHECK (fd.get () >= 0);
 
-  SELF_CHECK (write (fd, "Hello!", 7) == 7);
-  close (fd);
+    SELF_CHECK (write (fd.get (), "Hello!", 7) == 7);
+  }
 
   gdb::unlinker unlink_test_file (filename);
 
index a2cb916dd15d8d35222ffa1ceea16c7fd0b67bbb..10e9eba15059d72826b4b7205076bd0502d37a33 100644 (file)
@@ -54,11 +54,11 @@ extern scoped_fd gdb_open_cloexec (const char *filename, int flags,
 /* Like mkstemp, but ensures that the file descriptor is
    close-on-exec.  */
 
-static inline int
+static inline scoped_fd
 gdb_mkostemp_cloexec (char *name_template, int flags = 0)
 {
   /* gnulib provides a mkostemp replacement if needed.  */
-  return mkostemp (name_template, flags | O_CLOEXEC);
+  return scoped_fd (mkostemp (name_template, flags | O_CLOEXEC));
 }
 
 /* Convenience wrapper for the above, which takes the filename as an