aboutsummaryrefslogtreecommitdiff
path: root/kernel/include
diff options
context:
space:
mode:
authorLukas Oesch <lukasoesch20@gmail.com>2026-03-20 21:47:58 +0100
committerLukas Oesch <lukasoesch20@gmail.com>2026-03-26 21:17:24 +0100
commitf669454966c9fa8cbdbbefb1d9cfdd61026849f9 (patch)
tree3084f384f0039a58e51067fd18d9fb1e9d7bb66a /kernel/include
parent09e3d0cb2272e7eabd79a320c17c58124515d427 (diff)
downloadteachos-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.hpp19
-rw-r--r--kernel/include/kernel/filesystem/ext2/ext2_file.hpp4
-rw-r--r--kernel/include/kernel/filesystem/ext2/ext2_inode.hpp5
-rw-r--r--kernel/include/kernel/filesystem/inode_file.hpp25
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