diff options
| author | Lukas Oesch <lukasoesch20@gmail.com> | 2026-03-21 00:28:17 +0100 |
|---|---|---|
| committer | Lukas Oesch <lukasoesch20@gmail.com> | 2026-03-26 21:17:33 +0100 |
| commit | ba63fbfc2bb43a6f0f05b6b49fd51fd6c89a0861 (patch) | |
| tree | 87f30fe5d929c170d4eecbdf2989773c821d537a /kernel/include | |
| parent | 90452b752688110db2edc8d5dccdf0d6e0face5f (diff) | |
| download | teachos-ba63fbfc2bb43a6f0f05b6b49fd51fd6c89a0861.tar.xz teachos-ba63fbfc2bb43a6f0f05b6b49fd51fd6c89a0861.zip | |
refactor file and inode architecture again
Diffstat (limited to 'kernel/include')
| -rw-r--r-- | kernel/include/kernel/filesystem/device_file.hpp | 6 | ||||
| -rw-r--r-- | kernel/include/kernel/filesystem/device_inode.hpp | 7 | ||||
| -rw-r--r-- | kernel/include/kernel/filesystem/disk_file.hpp | 19 | ||||
| -rw-r--r-- | kernel/include/kernel/filesystem/ext2/ext2_file.hpp | 8 | ||||
| -rw-r--r-- | kernel/include/kernel/filesystem/ext2/ext2_inode.hpp | 9 | ||||
| -rw-r--r-- | kernel/include/kernel/filesystem/file.hpp | 8 | ||||
| -rw-r--r-- | kernel/include/kernel/filesystem/inode.hpp | 8 | ||||
| -rw-r--r-- | kernel/include/kernel/filesystem/inode_file.hpp | 9 |
8 files changed, 33 insertions, 41 deletions
diff --git a/kernel/include/kernel/filesystem/device_file.hpp b/kernel/include/kernel/filesystem/device_file.hpp index ff803f8..22ddb49 100644 --- a/kernel/include/kernel/filesystem/device_file.hpp +++ b/kernel/include/kernel/filesystem/device_file.hpp @@ -11,9 +11,11 @@ namespace filesystem { + struct inode; + struct device_file : file { - explicit device_file(kstd::shared_ptr<devices::device> const & device); + explicit device_file(kstd::shared_ptr<inode> const & inode); auto read(void * buffer, size_t offset, size_t size) const -> size_t override; auto write(void const * buffer, size_t offset, size_t size) -> size_t override; @@ -23,7 +25,7 @@ namespace filesystem std::byte * scratch, void * buffer); auto process_blocks(size_t offset, size_t size, void * buffer, block_op op) const -> size_t; - kstd::shared_ptr<devices::device> m_device; + [[nodiscard]] auto device() const -> kstd::shared_ptr<devices::device> const &; }; } // namespace filesystem diff --git a/kernel/include/kernel/filesystem/device_inode.hpp b/kernel/include/kernel/filesystem/device_inode.hpp index c38c75b..af2a51b 100644 --- a/kernel/include/kernel/filesystem/device_inode.hpp +++ b/kernel/include/kernel/filesystem/device_inode.hpp @@ -2,18 +2,21 @@ #define TEACH_OS_KERNEL_FILESYSTEM_DEVICE_INODE_HPP #include "kernel/devices/device.hpp" -#include "kernel/filesystem/file.hpp" #include "kernel/filesystem/inode.hpp" #include <kstd/memory> namespace filesystem { + struct file; + struct device_inode : inode { explicit device_inode(kstd::shared_ptr<devices::device> const & device); - [[nodiscard]] auto open_file() const -> kstd::shared_ptr<file> override; + [[nodiscard]] auto open_file(kstd::shared_ptr<inode> const & self) const -> kstd::shared_ptr<file> override; + + [[nodiscard]] auto device() const -> kstd::shared_ptr<devices::device> const &; private: kstd::shared_ptr<devices::device> m_device{}; diff --git a/kernel/include/kernel/filesystem/disk_file.hpp b/kernel/include/kernel/filesystem/disk_file.hpp deleted file mode 100644 index c6a7655..0000000 --- a/kernel/include/kernel/filesystem/disk_file.hpp +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef TEACH_OS_KERNEL_FILESYSTEM_DISK_FILE_HPP -#define TEACH_OS_KERNEL_FILESYSTEM_DISK_FILE_HPP - -#include <kstd/memory> - -#include <cstddef> - -namespace filesystem -{ - struct disk_file - { - virtual ~disk_file() = default; - - virtual auto read(void * buffer, size_t offset, size_t size) const -> size_t = 0; - virtual auto write(void const * buffer, size_t offset, size_t size) -> size_t = 0; - }; -} // namespace filesystem - -#endif
\ No newline at end of file diff --git a/kernel/include/kernel/filesystem/ext2/ext2_file.hpp b/kernel/include/kernel/filesystem/ext2/ext2_file.hpp index 371507d..e5357e3 100644 --- a/kernel/include/kernel/filesystem/ext2/ext2_file.hpp +++ b/kernel/include/kernel/filesystem/ext2/ext2_file.hpp @@ -1,16 +1,14 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILE_HPP -#include "kernel/filesystem/disk_file.hpp" - #include <cstddef> namespace filesystem::ext2 { - struct ext2_file : disk_file + struct ext2_file { - auto read(void * buffer, size_t offset, size_t size) const -> size_t override; - auto write(void const * buffer, size_t offset, size_t size) -> size_t override; + 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; }; } // namespace filesystem::ext2 diff --git a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp index 7b5ff3f..b57d267 100644 --- a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp +++ b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp @@ -1,7 +1,7 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP -#include "kernel/filesystem/disk_file.hpp" +#include "kernel/filesystem/ext2/ext2_file.hpp" #include "kernel/filesystem/file.hpp" #include "kernel/filesystem/inode.hpp" @@ -11,12 +11,13 @@ namespace filesystem::ext2 { struct ext2_inode : inode { - explicit ext2_inode(kstd::shared_ptr<disk_file> const & disk_file); + explicit ext2_inode(); - [[nodiscard]] auto open_file() const -> kstd::shared_ptr<file> override; + [[nodiscard]] auto open_file(kstd::shared_ptr<inode> const & self) const + -> kstd::shared_ptr<filesystem::file> override; private: - kstd::shared_ptr<disk_file> m_disk_file{}; + kstd::shared_ptr<ext2_file> m_file{}; }; } // namespace filesystem::ext2 diff --git a/kernel/include/kernel/filesystem/file.hpp b/kernel/include/kernel/filesystem/file.hpp index 5a41fab..522f078 100644 --- a/kernel/include/kernel/filesystem/file.hpp +++ b/kernel/include/kernel/filesystem/file.hpp @@ -1,16 +1,24 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_FILE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_FILE_HPP +#include <kstd/memory> + #include <cstddef> namespace filesystem { + struct inode; + struct file { + explicit file(kstd::shared_ptr<inode> const & inode); virtual ~file() = default; virtual auto read(void * buffer, size_t offset, size_t size) const -> size_t = 0; virtual auto write(void const * buffer, size_t offset, size_t size) -> size_t = 0; + + protected: + kstd::shared_ptr<inode> m_inode; }; } // namespace filesystem diff --git a/kernel/include/kernel/filesystem/inode.hpp b/kernel/include/kernel/filesystem/inode.hpp index 79cbcf9..8c9f75e 100644 --- a/kernel/include/kernel/filesystem/inode.hpp +++ b/kernel/include/kernel/filesystem/inode.hpp @@ -1,12 +1,12 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP -#include "kernel/filesystem/file.hpp" - #include <kstd/memory> namespace filesystem { + struct file; + struct inode { enum class inode_kind @@ -20,12 +20,12 @@ namespace filesystem virtual ~inode() = default; + [[nodiscard]] virtual auto open_file(kstd::shared_ptr<inode> const & self) const -> kstd::shared_ptr<file> = 0; + [[nodiscard]] auto is_directory() const -> bool; [[nodiscard]] auto is_regular() const -> bool; [[nodiscard]] auto is_device() const -> bool; - [[nodiscard]] virtual auto open_file() const -> kstd::shared_ptr<file> = 0; - private: inode_kind m_kind{inode_kind::regular}; }; diff --git a/kernel/include/kernel/filesystem/inode_file.hpp b/kernel/include/kernel/filesystem/inode_file.hpp index 3e2b954..f87b77c 100644 --- a/kernel/include/kernel/filesystem/inode_file.hpp +++ b/kernel/include/kernel/filesystem/inode_file.hpp @@ -1,8 +1,8 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_FILE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_INODE_FILE_HPP -#include "kernel/filesystem/disk_file.hpp" #include "kernel/filesystem/file.hpp" +#include "kernel/filesystem/inode.hpp" #include <kstd/memory> @@ -10,15 +10,14 @@ namespace filesystem { + struct inode; + struct inode_file : file { - explicit inode_file(kstd::shared_ptr<disk_file> const & disk_file); + explicit inode_file(kstd::shared_ptr<inode> const & inode); auto read(void * buffer, size_t offset, size_t size) const -> size_t override; auto write(void const * buffer, size_t offset, size_t size) -> size_t override; - - private: - kstd::shared_ptr<disk_file> m_disk_file; }; } // namespace filesystem |
