diff options
author | Tom Tromey <tom@tromey.com> | 2018-09-20 16:30:47 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-10-27 11:58:41 -0600 |
commit | 36033ef57cd048588f9a3d5523712147066421f2 (patch) | |
tree | c5e9a94e4f5eb6b7c4bd50fe3baf53cd52eee73f /gdb/common | |
parent | b3279b601e67ce47263082ef86cfc86e25607c5e (diff) | |
download | gdb-36033ef57cd048588f9a3d5523712147066421f2.zip gdb-36033ef57cd048588f9a3d5523712147066421f2.tar.gz gdb-36033ef57cd048588f9a3d5523712147066421f2.tar.bz2 |
Do not reopen temporary files
The current callers of mkostemp close the file descriptor and then
re-open it with fopen. It seemed better to me to continue to use the
already-opened file descriptor, so this patch rearranges the code a
little in order to do so. It takes care to ensure that the files are
only unlinked after the file descriptor in question is closed, as
before.
gdb/ChangeLog
2018-10-27 Tom Tromey <tom@tromey.com>
* unittests/scoped_fd-selftests.c (test_to_file): New function.
(run_tests): Call test_to_file.
* dwarf-index-write.c (write_psymtabs_to_index): Do not reopen
temporary files.
* common/scoped_fd.h (scoped_fd::to_file): New method.
Diffstat (limited to 'gdb/common')
-rw-r--r-- | gdb/common/scoped_fd.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/gdb/common/scoped_fd.h b/gdb/common/scoped_fd.h index c2125bd..d20e18a 100644 --- a/gdb/common/scoped_fd.h +++ b/gdb/common/scoped_fd.h @@ -21,6 +21,7 @@ #define SCOPED_FD_H #include <unistd.h> +#include "filestuff.h" /* A smart-pointer-like class to automatically close a file descriptor. */ @@ -43,6 +44,18 @@ public: return fd; } + /* Like release, but return a gdb_file_up that owns the file + descriptor. On success, this scoped_fd will be released. On + failure, return NULL and leave this scoped_fd in possession of + the fd. */ + gdb_file_up to_file (const char *mode) noexcept + { + gdb_file_up result (fdopen (m_fd, mode)); + if (result != nullptr) + m_fd = -1; + return result; + } + int get () const noexcept { return m_fd; |