aboutsummaryrefslogtreecommitdiff
path: root/kernel/include/kernel/filesystem/inode.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/include/kernel/filesystem/inode.hpp')
-rw-r--r--kernel/include/kernel/filesystem/inode.hpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/kernel/include/kernel/filesystem/inode.hpp b/kernel/include/kernel/filesystem/inode.hpp
new file mode 100644
index 00000000..a2955f93
--- /dev/null
+++ b/kernel/include/kernel/filesystem/inode.hpp
@@ -0,0 +1,38 @@
+#ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP
+#define TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP
+
+#include "kernel/devices/device.hpp"
+#include "kernel/filesystem/inode_metadata.hpp"
+
+#include <kstd/memory>
+
+#include <cstddef>
+
+namespace filesystem
+{
+ struct inode
+ {
+ inode() = default;
+ explicit inode(inode_kind kind);
+ explicit inode(kstd::shared_ptr<devices::device> const & device);
+
+ [[nodiscard]] auto metadata() const -> inode_metadata;
+
+ [[nodiscard]] auto is_directory() const -> bool;
+ [[nodiscard]] auto is_regular() const -> bool;
+ [[nodiscard]] auto is_device() const -> bool;
+ [[nodiscard]] auto is_block_device() const -> bool;
+ [[nodiscard]] auto major_device() const -> size_t;
+ [[nodiscard]] auto minor_device() const -> size_t;
+ [[nodiscard]] auto backing_device() const -> kstd::shared_ptr<devices::device> const &;
+
+ auto read(void * buffer, size_t offset, size_t size) const -> size_t;
+ auto write(void const * buffer, size_t offset, size_t size) -> size_t;
+
+ private:
+ inode_kind m_kind{inode_kind::regular};
+ kstd::shared_ptr<devices::device> m_device{};
+ };
+} // namespace filesystem
+
+#endif