summaryrefslogtreecommitdiffstats
path: root/src/ipmiblob/internal/sys.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ipmiblob/internal/sys.hpp')
-rw-r--r--src/ipmiblob/internal/sys.hpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/ipmiblob/internal/sys.hpp b/src/ipmiblob/internal/sys.hpp
new file mode 100644
index 0000000..2975b8c
--- /dev/null
+++ b/src/ipmiblob/internal/sys.hpp
@@ -0,0 +1,61 @@
+#pragma once
+
+/* NOTE: IIRC, wak@ is working on exposing some of this in stdplus, so we can
+ * transition when that's ready.
+ *
+ * Copied some from gpioplus to enable unit-testing of lpc nuvoton and later
+ * other pieces.
+ */
+
+#include <poll.h>
+#include <sys/mman.h>
+
+#include <cinttypes>
+#include <cstddef>
+
+namespace internal
+{
+
+/**
+ * @class Sys
+ * @brief Overridable direct syscall interface
+ */
+class Sys
+{
+ public:
+ virtual ~Sys() = default;
+
+ virtual int open(const char* pathname, int flags) const = 0;
+ virtual int read(int fd, void* buf, std::size_t count) const = 0;
+ virtual int close(int fd) const = 0;
+ virtual void* mmap(void* addr, std::size_t length, int prot, int flags,
+ int fd, off_t offset) const = 0;
+ virtual int munmap(void* addr, std::size_t length) const = 0;
+ virtual int getpagesize() const = 0;
+ virtual int ioctl(int fd, unsigned long request, void* param) const = 0;
+ virtual int poll(struct pollfd* fds, nfds_t nfds, int timeout) const = 0;
+};
+
+/**
+ * @class SysImpl
+ * @brief syscall concrete implementation
+ * @details Passes through all calls to the normal linux syscalls
+ */
+class SysImpl : public Sys
+{
+ public:
+ int open(const char* pathname, int flags) const override;
+ int read(int fd, void* buf, std::size_t count) const override;
+ int close(int fd) const override;
+ void* mmap(void* addr, std::size_t length, int prot, int flags, int fd,
+ off_t offset) const override;
+ int munmap(void* addr, std::size_t length) const override;
+ int getpagesize() const override;
+ int ioctl(int fd, unsigned long request, void* param) const override;
+ int poll(struct pollfd* fds, nfds_t nfds, int timeout) const override;
+};
+
+/** @brief Default instantiation of sys */
+extern SysImpl sys_impl;
+
+} // namespace internal
OpenPOWER on IntegriCloud