made all fdstreams RAII for fd

This commit is contained in:
Bob Polis 2020-04-25 17:42:26 +02:00
parent de371a94a5
commit 5012f2e582
3 changed files with 34 additions and 3 deletions

28
fdstream.cpp Normal file
View File

@ -0,0 +1,28 @@
//
// fdstream.cpp
// libscio
//
// Created by Bob Polis at 2020-04-25
// Copyright (c) 2020 SwiftCoder. All rights reserved.
//
#include "libscio.hpp"
#include <unistd.h>
sc::io::fdostream::~fdostream() {
if (_outbuf.fd() != -1) {
::close(_outbuf.fd());
}
}
sc::io::fdistream::~fdistream() {
if (_inbuf.fd() != -1) {
::close(_inbuf.fd());
}
}
sc::io::fdstream::~fdstream() {
if (_iobuf.fd() != -1) {
::close(_iobuf.fd());
}
}

View File

@ -56,6 +56,8 @@ namespace sc {
fdostream(int fd) : std::ostream(&_outbuf), _outbuf(fd) {}
fdostream() : std::ostream(&_outbuf), _outbuf(-1) {}
virtual ~fdostream();
int fd() const { return _outbuf.fd(); }
void fd(int fd) { _outbuf.fd(fd); }
@ -68,6 +70,8 @@ namespace sc {
fdistream(int fd) : std::istream(&_inbuf), _inbuf(fd) {}
fdistream() : std::istream(&_inbuf), _inbuf(-1) {}
virtual ~fdistream();
int fd() const { return _inbuf.fd(); }
void fd(int fd) { _inbuf.fd(fd); }
@ -80,6 +84,8 @@ namespace sc {
fdstream() : std::iostream(&_iobuf) {}
fdstream(int fd) : std::iostream(&_iobuf), _iobuf(fd) {}
virtual ~fdstream();
int fd() const { return _iobuf.fd(); }
void fd(int fd) { _iobuf.fd(fd); }

View File

@ -66,7 +66,6 @@ void test3() {
throw_if_min1(fd = ::open("passwd", mode, perm));
sc::io::fdostream os {fd};
os << passwd;
throw_if_min1(::close(fd));
}
void test4() {
@ -77,7 +76,6 @@ void test4() {
while (getline(is, line)) {
cout << line << '\n';
}
throw_if_min1(::close(fd));
}
void test5() {
@ -92,7 +90,6 @@ void test5() {
if (getline(file, line)) {
cout << line << '\n';
}
throw_if_min1(::close(fd));
}
int main(int argc, const char * argv[]) {