[3/3] gdbsupport: make gdb_mkostemp_cloexec return a scoped_fd

Message ID 20210722193714.1778717-3-simon.marchi@polymtl.ca
State New
Headers show
Series
  • [1/3] gdbsupport: change scoped_fd::to_file to a free function
Related show

Commit Message

Natarajan, Kavitha via Gdb-patches July 22, 2021, 7:37 p.m.
This encourages the callers to use automatic file descriptor management.

Change-Id: I137a81df6f3607b457e28c35aafde8ed6f3a3344
---
 gdb/darwin-nat.c                      | 2 +-
 gdb/dwarf2/index-write.c              | 4 ++--
 gdb/unittests/scoped_fd-selftests.c   | 6 +++---
 gdb/unittests/scoped_mmap-selftests.c | 9 +++++----
 gdbsupport/filestuff.h                | 4 ++--
 5 files changed, 13 insertions(+), 12 deletions(-)

-- 
2.32.0

Patch

diff --git a/gdb/darwin-nat.c b/gdb/darwin-nat.c
index eb3b6fa8ef4c..a90ba8675b3c 100644
--- a/gdb/darwin-nat.c
+++ b/gdb/darwin-nat.c
@@ -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)
diff --git a/gdb/dwarf2/index-write.c b/gdb/dwarf2/index-write.c
index 59a6aa4264d5..6cec5c25ef42 100644
--- a/gdb/dwarf2/index-write.c
+++ b/gdb/dwarf2/index-write.c
@@ -1539,8 +1539,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"));
 
diff --git a/gdb/unittests/scoped_fd-selftests.c b/gdb/unittests/scoped_fd-selftests.c
index 1a361f00a2e3..5aa0e4e7a198 100644
--- a/gdb/unittests/scoped_fd-selftests.c
+++ b/gdb/unittests/scoped_fd-selftests.c
@@ -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);
diff --git a/gdb/unittests/scoped_mmap-selftests.c b/gdb/unittests/scoped_mmap-selftests.c
index 92a821d14b31..76d6c417ad05 100644
--- a/gdb/unittests/scoped_mmap-selftests.c
+++ b/gdb/unittests/scoped_mmap-selftests.c
@@ -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);
 
diff --git a/gdbsupport/filestuff.h b/gdbsupport/filestuff.h
index a75312544191..de71ec90647c 100644
--- a/gdbsupport/filestuff.h
+++ b/gdbsupport/filestuff.h
@@ -53,11 +53,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