aboutsummaryrefslogtreecommitdiff
path: root/gdb/common
diff options
context:
space:
mode:
authorMarkus Metzger <markus.t.metzger@intel.com>2018-01-26 13:07:29 +0100
committerMarkus Metzger <markus.t.metzger@intel.com>2018-02-09 14:03:18 +0100
commitea4a0888120dec61348cae460ffa08de663e2852 (patch)
tree10e0954504a3fa4e99dce1a4af3766515a4126dd /gdb/common
parent869e8290ea62f594d2472476303bb74604e9326b (diff)
downloadgdb-ea4a0888120dec61348cae460ffa08de663e2852.zip
gdb-ea4a0888120dec61348cae460ffa08de663e2852.tar.gz
gdb-ea4a0888120dec61348cae460ffa08de663e2852.tar.bz2
common: add scoped_fd
Add a simple helper to automatically close a file descriptor. gdb/ * common/scoped_fd.h: New. * unittests/scoped_fd-selftest.c: New. * Makefile.in (SUBDIR_UNITTESTS_SRCS): Add unittests/scoped_fd-selftest.c.
Diffstat (limited to 'gdb/common')
-rw-r--r--gdb/common/scoped_fd.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/gdb/common/scoped_fd.h b/gdb/common/scoped_fd.h
new file mode 100644
index 0000000..a6a8ab9
--- /dev/null
+++ b/gdb/common/scoped_fd.h
@@ -0,0 +1,60 @@
+/* scoped_fd, automatically close a file descriptor
+
+ Copyright (C) 2018 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef SCOPED_FD_H
+#define SCOPED_FD_H
+
+#include "config.h"
+
+#ifdef HAVE_UNISTD_H
+
+#include <unistd.h>
+
+/* A smart-pointer-like class to automatically close a file descriptor. */
+
+class scoped_fd
+{
+public:
+ explicit scoped_fd (int fd = -1) noexcept : m_fd (fd) {}
+ ~scoped_fd ()
+ {
+ if (m_fd >= 0)
+ close (m_fd);
+ }
+
+ DISABLE_COPY_AND_ASSIGN (scoped_fd);
+
+ int release () noexcept
+ {
+ int fd = m_fd;
+ m_fd = -1;
+ return fd;
+ }
+
+ int get () const noexcept
+ {
+ return m_fd;
+ }
+
+private:
+ int m_fd;
+};
+
+#endif /* HAVE_UNISTD_H */
+#endif /* SCOPED_FD_H */