106a0c2c4SMurulidhar Nataraju #pragma once 206a0c2c4SMurulidhar Nataraju 306a0c2c4SMurulidhar Nataraju #include <unistd.h> 4*da79c9caSPatrick Venture 5*da79c9caSPatrick Venture #include <sstream> 6*da79c9caSPatrick Venture 706a0c2c4SMurulidhar Nataraju namespace openpower 806a0c2c4SMurulidhar Nataraju { 906a0c2c4SMurulidhar Nataraju namespace sbe 1006a0c2c4SMurulidhar Nataraju { 1106a0c2c4SMurulidhar Nataraju namespace internal 1206a0c2c4SMurulidhar Nataraju { 1306a0c2c4SMurulidhar Nataraju 1406a0c2c4SMurulidhar Nataraju /** @class FileDescriptor 1506a0c2c4SMurulidhar Nataraju * @brief Provide RAII file descriptor 1606a0c2c4SMurulidhar Nataraju */ 1706a0c2c4SMurulidhar Nataraju class FileDescriptor 1806a0c2c4SMurulidhar Nataraju { 1906a0c2c4SMurulidhar Nataraju private: 2006a0c2c4SMurulidhar Nataraju /** @brief File descriptor for the SBE FIFO device */ 2106a0c2c4SMurulidhar Nataraju int fd = -1; 2206a0c2c4SMurulidhar Nataraju 2306a0c2c4SMurulidhar Nataraju public: 2406a0c2c4SMurulidhar Nataraju FileDescriptor() = delete; 2506a0c2c4SMurulidhar Nataraju FileDescriptor(const FileDescriptor&) = delete; 2606a0c2c4SMurulidhar Nataraju FileDescriptor& operator=(const FileDescriptor&) = delete; 2706a0c2c4SMurulidhar Nataraju FileDescriptor(FileDescriptor&&) = delete; 2806a0c2c4SMurulidhar Nataraju FileDescriptor& operator=(FileDescriptor&&) = delete; 2906a0c2c4SMurulidhar Nataraju 3006a0c2c4SMurulidhar Nataraju /** @brief Opens the input file and saves the file descriptor 3106a0c2c4SMurulidhar Nataraju * 3206a0c2c4SMurulidhar Nataraju * @param[in] devPath - Path of the file 3306a0c2c4SMurulidhar Nataraju * @para,[in] accessModes - File access modes 3406a0c2c4SMurulidhar Nataraju */ FileDescriptor(const char * devPath,int accessModes)3506a0c2c4SMurulidhar Nataraju FileDescriptor(const char* devPath, int accessModes) 3606a0c2c4SMurulidhar Nataraju { 3706a0c2c4SMurulidhar Nataraju fd = open(devPath, accessModes); 3806a0c2c4SMurulidhar Nataraju if (fd < 0) 3906a0c2c4SMurulidhar Nataraju { 4006a0c2c4SMurulidhar Nataraju // TODO:use elog infrastructure 4106a0c2c4SMurulidhar Nataraju std::ostringstream errMsg; 42*da79c9caSPatrick Venture errMsg << "Opening the device with device path:" << devPath 43*da79c9caSPatrick Venture << " and access modes:" << accessModes 44*da79c9caSPatrick Venture << ",Failed with errno" << errno; 4506a0c2c4SMurulidhar Nataraju throw std::runtime_error(errMsg.str().c_str()); 4606a0c2c4SMurulidhar Nataraju } 4706a0c2c4SMurulidhar Nataraju } 4806a0c2c4SMurulidhar Nataraju 4906a0c2c4SMurulidhar Nataraju /** @brief Saves File descriptor and uses it to do file operation 5006a0c2c4SMurulidhar Nataraju * 5106a0c2c4SMurulidhar Nataraju * @param[in] fd - File descriptor 5206a0c2c4SMurulidhar Nataraju */ FileDescriptor(int fd)5306a0c2c4SMurulidhar Nataraju FileDescriptor(int fd) : fd(fd) 5406a0c2c4SMurulidhar Nataraju { 5506a0c2c4SMurulidhar Nataraju // Nothing 5606a0c2c4SMurulidhar Nataraju } 5706a0c2c4SMurulidhar Nataraju ~FileDescriptor()5806a0c2c4SMurulidhar Nataraju ~FileDescriptor() 5906a0c2c4SMurulidhar Nataraju { 6006a0c2c4SMurulidhar Nataraju if (fd >= 0) 6106a0c2c4SMurulidhar Nataraju { 6206a0c2c4SMurulidhar Nataraju close(fd); 6306a0c2c4SMurulidhar Nataraju } 6406a0c2c4SMurulidhar Nataraju } 6506a0c2c4SMurulidhar Nataraju operator ()()6606a0c2c4SMurulidhar Nataraju int operator()() 6706a0c2c4SMurulidhar Nataraju { 6806a0c2c4SMurulidhar Nataraju return fd; 6906a0c2c4SMurulidhar Nataraju } 7006a0c2c4SMurulidhar Nataraju }; 7106a0c2c4SMurulidhar Nataraju 7206a0c2c4SMurulidhar Nataraju } // namespace internal 7306a0c2c4SMurulidhar Nataraju } // namespace sbe 7406a0c2c4SMurulidhar Nataraju } // namespace openpower 75