xref: /openbmc/dbus-sensors/src/FileHandle.cpp (revision 73030639)
1*73030639SEd Tanous #include <fcntl.h>
2*73030639SEd Tanous #include <unistd.h>
3*73030639SEd Tanous 
4*73030639SEd Tanous #include <FileHandle.hpp>
5*73030639SEd Tanous 
6*73030639SEd Tanous #include <iostream>
7*73030639SEd Tanous #include <stdexcept>
8*73030639SEd Tanous 
9*73030639SEd Tanous FileHandle::FileHandle(const std::filesystem::path& name,
10*73030639SEd Tanous                        std::ios_base::openmode mode) :
11*73030639SEd Tanous     // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg)
12*73030639SEd Tanous     fd(open(name.c_str(), mode))
13*73030639SEd Tanous {
14*73030639SEd Tanous     if (fd < 0)
15*73030639SEd Tanous     {
16*73030639SEd Tanous         throw std::out_of_range(name.string() + " failed to open");
17*73030639SEd Tanous     }
18*73030639SEd Tanous }
19*73030639SEd Tanous 
20*73030639SEd Tanous FileHandle::FileHandle(int fdIn) : fd(fdIn){};
21*73030639SEd Tanous 
22*73030639SEd Tanous FileHandle::FileHandle(FileHandle&& in) noexcept
23*73030639SEd Tanous {
24*73030639SEd Tanous     fd = in.fd;
25*73030639SEd Tanous     in.fd = -1;
26*73030639SEd Tanous }
27*73030639SEd Tanous 
28*73030639SEd Tanous FileHandle& FileHandle::operator=(FileHandle&& in) noexcept
29*73030639SEd Tanous {
30*73030639SEd Tanous     fd = in.fd;
31*73030639SEd Tanous     in.fd = -1;
32*73030639SEd Tanous     return *this;
33*73030639SEd Tanous }
34*73030639SEd Tanous 
35*73030639SEd Tanous FileHandle::~FileHandle()
36*73030639SEd Tanous {
37*73030639SEd Tanous     if (fd)
38*73030639SEd Tanous     {
39*73030639SEd Tanous         int r = close(fd);
40*73030639SEd Tanous         if (r < 0)
41*73030639SEd Tanous         {
42*73030639SEd Tanous             std::cerr << "Failed to close fd " << std::to_string(fd);
43*73030639SEd Tanous         }
44*73030639SEd Tanous     }
45*73030639SEd Tanous }
46*73030639SEd Tanous 
47*73030639SEd Tanous int FileHandle::handle()
48*73030639SEd Tanous {
49*73030639SEd Tanous     return fd;
50*73030639SEd Tanous }
51