From 6a66bd864b9b95258a198e65849fa693f88032aa Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Sun, 18 Oct 2015 17:27:50 +0200 Subject: Prevent external changes to `FileDescriptorGuard`'s fd member --- io.h | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) (limited to 'io.h') diff --git a/io.h b/io.h index c9ce30e..87778ec 100644 --- a/io.h +++ b/io.h @@ -10,20 +10,27 @@ namespace io { -struct FileDescriptorGuard { - FileDescriptorGuard(const std::string& path) { - this->fd = open(path.c_str(), O_WRONLY | O_APPEND); +class FileDescriptorGuard { + public: + FileDescriptorGuard(const std::string& path) { + this->fd = open(path.c_str(), O_WRONLY | O_APPEND); + + if ( !this->fd ) { + this->fd = STDERR_FILENO; + } + } - if ( !this->fd ) { - this->fd = STDERR_FILENO; + ~FileDescriptorGuard() { + close(this->fd); } - } - ~FileDescriptorGuard() { - close(this->fd); - } + operator int() { + return this->fd; + } + + private: + int fd; - int fd; }; std::string get_file_name(int fd) { -- cgit v1.2.3