1e73bd0a1SAndrew Jeffery #include "FileHandle.hpp" 2e73bd0a1SAndrew Jeffery 373030639SEd Tanous #include <fcntl.h> 473030639SEd Tanous #include <unistd.h> 573030639SEd Tanous 6*eacbfdd1SEd Tanous #include <filesystem> 773030639SEd Tanous #include <iostream> 873030639SEd Tanous #include <stdexcept> 9*eacbfdd1SEd Tanous #include <string> 1073030639SEd Tanous FileHandle(const std::filesystem::path & name,std::ios_base::openmode mode)1173030639SEd TanousFileHandle::FileHandle(const std::filesystem::path& name, 1273030639SEd Tanous std::ios_base::openmode mode) : 1373030639SEd Tanous // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg) 1473030639SEd Tanous fd(open(name.c_str(), mode)) 1573030639SEd Tanous { 1673030639SEd Tanous if (fd < 0) 1773030639SEd Tanous { 1873030639SEd Tanous throw std::out_of_range(name.string() + " failed to open"); 1973030639SEd Tanous } 2073030639SEd Tanous } 2173030639SEd Tanous FileHandle(int fdIn)2273030639SEd TanousFileHandle::FileHandle(int fdIn) : fd(fdIn){}; 2373030639SEd Tanous FileHandle(FileHandle && in)242049bd26SEd TanousFileHandle::FileHandle(FileHandle&& in) noexcept : fd(in.fd) 2573030639SEd Tanous { 2673030639SEd Tanous in.fd = -1; 2773030639SEd Tanous } 2873030639SEd Tanous operator =(FileHandle && in)2973030639SEd TanousFileHandle& FileHandle::operator=(FileHandle&& in) noexcept 3073030639SEd Tanous { 3173030639SEd Tanous fd = in.fd; 3273030639SEd Tanous in.fd = -1; 3373030639SEd Tanous return *this; 3473030639SEd Tanous } 3573030639SEd Tanous ~FileHandle()3673030639SEd TanousFileHandle::~FileHandle() 3773030639SEd Tanous { 38e330c0c1SHao Jiang if (fd >= 0) 3973030639SEd Tanous { 4073030639SEd Tanous int r = close(fd); 4173030639SEd Tanous if (r < 0) 4273030639SEd Tanous { 4373030639SEd Tanous std::cerr << "Failed to close fd " << std::to_string(fd); 4473030639SEd Tanous } 4573030639SEd Tanous } 4673030639SEd Tanous } 4773030639SEd Tanous handle() const482049bd26SEd Tanousint FileHandle::handle() const 4973030639SEd Tanous { 5073030639SEd Tanous return fd; 5173030639SEd Tanous } 52