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:
parent
13084383e8
commit
2fed9db40b
5 changed files with 13 additions and 12 deletions
|
@ -1833,7 +1833,7 @@ copy_shell_to_cache (const char *shell, const std::string &new_name)
|
||||||
new_dir.c_str (), safe_strerror (errno));
|
new_dir.c_str (), safe_strerror (errno));
|
||||||
|
|
||||||
gdb::char_vector temp_name = make_temp_filename (new_name);
|
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 ());
|
gdb::unlinker unlink_file_on_error (temp_name.data ());
|
||||||
|
|
||||||
if (to_fd.get () < 0)
|
if (to_fd.get () < 0)
|
||||||
|
|
|
@ -1538,8 +1538,8 @@ struct index_wip_file
|
||||||
|
|
||||||
filename_temp = make_temp_filename (filename);
|
filename_temp = make_temp_filename (filename);
|
||||||
|
|
||||||
scoped_fd out_file_fd (gdb_mkostemp_cloexec (filename_temp.data (),
|
scoped_fd out_file_fd = gdb_mkostemp_cloexec (filename_temp.data (),
|
||||||
O_BINARY));
|
O_BINARY);
|
||||||
if (out_file_fd.get () == -1)
|
if (out_file_fd.get () == -1)
|
||||||
perror_with_name (("mkstemp"));
|
perror_with_name (("mkstemp"));
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ static void
|
||||||
test_destroy ()
|
test_destroy ()
|
||||||
{
|
{
|
||||||
char filename[] = "scoped_fd-selftest-XXXXXX";
|
char filename[] = "scoped_fd-selftest-XXXXXX";
|
||||||
int fd = gdb_mkostemp_cloexec (filename);
|
int fd = gdb_mkostemp_cloexec (filename).release ();
|
||||||
SELF_CHECK (fd >= 0);
|
SELF_CHECK (fd >= 0);
|
||||||
|
|
||||||
unlink (filename);
|
unlink (filename);
|
||||||
|
@ -51,7 +51,7 @@ static void
|
||||||
test_release ()
|
test_release ()
|
||||||
{
|
{
|
||||||
char filename[] = "scoped_fd-selftest-XXXXXX";
|
char filename[] = "scoped_fd-selftest-XXXXXX";
|
||||||
int fd = gdb_mkostemp_cloexec (filename);
|
int fd = gdb_mkostemp_cloexec (filename).release ();
|
||||||
SELF_CHECK (fd >= 0);
|
SELF_CHECK (fd >= 0);
|
||||||
|
|
||||||
unlink (filename);
|
unlink (filename);
|
||||||
|
@ -71,7 +71,7 @@ test_to_file ()
|
||||||
{
|
{
|
||||||
char filename[] = "scoped_fd-selftest-XXXXXX";
|
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);
|
SELF_CHECK (sfd.get () >= 0);
|
||||||
|
|
||||||
unlink (filename);
|
unlink (filename);
|
||||||
|
|
|
@ -89,11 +89,12 @@ static void
|
||||||
test_normal ()
|
test_normal ()
|
||||||
{
|
{
|
||||||
char filename[] = "scoped_mmapped_file-selftest-XXXXXX";
|
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);
|
SELF_CHECK (write (fd.get (), "Hello!", 7) == 7);
|
||||||
close (fd);
|
}
|
||||||
|
|
||||||
gdb::unlinker unlink_test_file (filename);
|
gdb::unlinker unlink_test_file (filename);
|
||||||
|
|
||||||
|
|
|
@ -54,11 +54,11 @@ extern scoped_fd gdb_open_cloexec (const char *filename, int flags,
|
||||||
/* Like mkstemp, but ensures that the file descriptor is
|
/* Like mkstemp, but ensures that the file descriptor is
|
||||||
close-on-exec. */
|
close-on-exec. */
|
||||||
|
|
||||||
static inline int
|
static inline scoped_fd
|
||||||
gdb_mkostemp_cloexec (char *name_template, int flags = 0)
|
gdb_mkostemp_cloexec (char *name_template, int flags = 0)
|
||||||
{
|
{
|
||||||
/* gnulib provides a mkostemp replacement if needed. */
|
/* 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
|
/* Convenience wrapper for the above, which takes the filename as an
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue