gdbsupport: make gdb_mkostemp_cloexec return a scoped_fd

This encourages the callers to use automatic file descriptor management.

Change-Id: I137a81df6f3607b457e28c35aafde8ed6f3a3344
This commit is contained in:
Simon Marchi 2021-07-22 15:33:42 -04:00
parent 13084383e8
commit 2fed9db40b
5 changed files with 13 additions and 12 deletions

View 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)

View 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"));

View 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);

View 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);

View 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