/* SPDX-License-Identifier: MIT */ #include "drm++/ioctl.hpp" #include #include #include using namespace drm::ioctl; Exception::Exception(int fd, unsigned long op) : m_fd(fd), m_op(op), m_syserrno(errno) { switch (errno) { case EBADF: m_code = Error::BadFileDescriptor; break; case EINVAL: case ENOTTY: m_code = Error::InvalidArgument; break; case ENOTSUP: m_code = Error::NotSupported; break; default: m_code = Error::Other; } } std::string Exception::readable() { switch (this->m_code) { case Error::BadFileDescriptor: return std::format( "ioctl({}, {}) failed: Invalid file descriptor", this->m_fd, this->m_op ); case Error::InvalidArgument: return std::format( "ioctl({}, {}) failed: Invalid argument (errno {})", this->m_fd, this->m_op, this->m_syserrno ); case Error::NotSupported: return std::format( "ioctl({}, {}) failed: Operation not supported", this->m_fd, this->m_op ); case Error::Other: return std::format( "ioctl({}, {}) failed: Unknown error (errno {})", this->m_fd, this->m_op, this->m_syserrno ); } } Exception::~Exception() = default;