diff options
| author | Lukas Oesch <lukasoesch20@gmail.com> | 2026-03-20 21:47:58 +0100 |
|---|---|---|
| committer | Lukas Oesch <lukasoesch20@gmail.com> | 2026-03-26 21:17:24 +0100 |
| commit | f669454966c9fa8cbdbbefb1d9cfdd61026849f9 (patch) | |
| tree | 3084f384f0039a58e51067fd18d9fb1e9d7bb66a /kernel/include | |
| parent | 09e3d0cb2272e7eabd79a320c17c58124515d427 (diff) | |
| download | teachos-f669454966c9fa8cbdbbefb1d9cfdd61026849f9.tar.xz teachos-f669454966c9fa8cbdbbefb1d9cfdd61026849f9.zip | |
improve architecture again -> use same architecture for devices and ext2_files
Diffstat (limited to 'kernel/include')
| -rw-r--r-- | kernel/include/kernel/filesystem/disk_file.hpp | 19 | ||||
| -rw-r--r-- | kernel/include/kernel/filesystem/ext2/ext2_file.hpp | 4 | ||||
| -rw-r--r-- | kernel/include/kernel/filesystem/ext2/ext2_inode.hpp | 5 | ||||
| -rw-r--r-- | kernel/include/kernel/filesystem/inode_file.hpp | 25 |
4 files changed, 49 insertions, 4 deletions
diff --git a/kernel/include/kernel/filesystem/disk_file.hpp b/kernel/include/kernel/filesystem/disk_file.hpp new file mode 100644 index 0000000..c6a7655 --- /dev/null +++ b/kernel/include/kernel/filesystem/disk_file.hpp @@ -0,0 +1,19 @@ +#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 b5708d8..371507d 100644 --- a/kernel/include/kernel/filesystem/ext2/ext2_file.hpp +++ b/kernel/include/kernel/filesystem/ext2/ext2_file.hpp @@ -1,13 +1,13 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILE_HPP -#include "kernel/filesystem/file.hpp" +#include "kernel/filesystem/disk_file.hpp" #include <cstddef> namespace filesystem::ext2 { - struct ext2_file : file + struct ext2_file : disk_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; diff --git a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp index f103877..7b5ff3f 100644 --- a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp +++ b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp @@ -1,6 +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/file.hpp" #include "kernel/filesystem/inode.hpp" @@ -10,12 +11,12 @@ namespace filesystem::ext2 { struct ext2_inode : inode { - ext2_inode(); + explicit ext2_inode(kstd::shared_ptr<disk_file> const & disk_file); [[nodiscard]] auto open_file() const -> kstd::shared_ptr<file> override; private: - // TODO BA-FS26 add ext2-specific inode metadata here (e.g. block pointers, size, permissions, etc.) + kstd::shared_ptr<disk_file> m_disk_file{}; }; } // namespace filesystem::ext2 diff --git a/kernel/include/kernel/filesystem/inode_file.hpp b/kernel/include/kernel/filesystem/inode_file.hpp new file mode 100644 index 0000000..3e2b954 --- /dev/null +++ b/kernel/include/kernel/filesystem/inode_file.hpp @@ -0,0 +1,25 @@ +#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 <kstd/memory> + +#include <cstddef> + +namespace filesystem +{ + struct inode_file : file + { + explicit inode_file(kstd::shared_ptr<disk_file> const & disk_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; + + private: + kstd::shared_ptr<disk_file> m_disk_file; + }; +} // namespace filesystem + +#endif
\ No newline at end of file |
