diff options
author | Adrian Kummerlaender | 2015-10-18 17:27:50 +0200 |
---|---|---|
committer | Adrian Kummerlaender | 2015-10-18 17:27:50 +0200 |
commit | 6a66bd864b9b95258a198e65849fa693f88032aa (patch) | |
tree | 16101853c9353b1f2146f7b842755067fe63c369 /io.h | |
parent | ceb01fb33a039d4f315c9aa9217320be44cefa2d (diff) | |
download | change-6a66bd864b9b95258a198e65849fa693f88032aa.tar change-6a66bd864b9b95258a198e65849fa693f88032aa.tar.gz change-6a66bd864b9b95258a198e65849fa693f88032aa.tar.bz2 change-6a66bd864b9b95258a198e65849fa693f88032aa.tar.lz change-6a66bd864b9b95258a198e65849fa693f88032aa.tar.xz change-6a66bd864b9b95258a198e65849fa693f88032aa.tar.zst change-6a66bd864b9b95258a198e65849fa693f88032aa.zip |
Prevent external changes to `FileDescriptorGuard`'s fd member
Diffstat (limited to 'io.h')
-rw-r--r-- | io.h | 27 |
1 files changed, 17 insertions, 10 deletions
@@ -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) { |