From: Simon Marchi Date: Thu, 22 Jul 2021 19:33:42 +0000 (-0400) Subject: gdbsupport: make gdb_mkostemp_cloexec return a scoped_fd X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2fed9db40b1179f62c6fb0f2cacfb0db6b50af46;p=binutils-gdb.git gdbsupport: make gdb_mkostemp_cloexec return a scoped_fd This encourages the callers to use automatic file descriptor management. Change-Id: I137a81df6f3607b457e28c35aafde8ed6f3a3344 --- diff --git a/gdb/darwin-nat.c b/gdb/darwin-nat.c index 525f59ae2ce..141eede11fe 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 0318b7a81b2..e92def7590b 100644 --- a/gdb/dwarf2/index-write.c +++ b/gdb/dwarf2/index-write.c @@ -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")); diff --git a/gdb/unittests/scoped_fd-selftests.c b/gdb/unittests/scoped_fd-selftests.c index d1803aaf8da..ff8d093794f 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 92a821d14b3..76d6c417ad0 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 a2cb916dd15..10e9eba1505 100644 --- a/gdbsupport/filestuff.h +++ b/gdbsupport/filestuff.h @@ -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