diff options
Diffstat (limited to 'kernel/include/kernel/filesystem/inode.hpp')
| -rw-r--r-- | kernel/include/kernel/filesystem/inode.hpp | 38 |
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 |
