xref: /openbmc/dbus-sensors/src/FileHandle.cpp (revision eacbfdd1)
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 Tanous FileHandle::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 Tanous FileHandle::FileHandle(int fdIn) : fd(fdIn){};
2373030639SEd Tanous 
FileHandle(FileHandle && in)242049bd26SEd Tanous FileHandle::FileHandle(FileHandle&& in) noexcept : fd(in.fd)
2573030639SEd Tanous {
2673030639SEd Tanous     in.fd = -1;
2773030639SEd Tanous }
2873030639SEd Tanous 
operator =(FileHandle && in)2973030639SEd Tanous FileHandle& 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 Tanous FileHandle::~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 Tanous int FileHandle::handle() const
4973030639SEd Tanous {
5073030639SEd Tanous     return fd;
5173030639SEd Tanous }
52