aboutsummaryrefslogtreecommitdiff
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
parent09e3d0cb2272e7eabd79a320c17c58124515d427 (diff)
downloadteachos-f669454966c9fa8cbdbbefb1d9cfdd61026849f9.tar.xz
teachos-f669454966c9fa8cbdbbefb1d9cfdd61026849f9.zip
improve architecture again -> use same architecture for devices and ext2_files
-rw-r--r--kernel/CMakeLists.txt1
-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
-rw-r--r--kernel/src/filesystem/ext2/ext2_inode.cpp8
-rw-r--r--kernel/src/filesystem/inode_file.cpp31
7 files changed, 86 insertions, 7 deletions
diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt
index a8287ba..e0b40be 100644
--- a/kernel/CMakeLists.txt
+++ b/kernel/CMakeLists.txt
@@ -29,6 +29,7 @@ add_executable("kernel"
"src/filesystem/device_inode.cpp"
"src/filesystem/file_descriptor_table.cpp"
"src/filesystem/filesystem.cpp"
+ "src/filesystem/inode_file.cpp"
"src/filesystem/inode.cpp"
"src/filesystem/mount.cpp"
"src/filesystem/open_file_description.cpp"
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
diff --git a/kernel/src/filesystem/ext2/ext2_inode.cpp b/kernel/src/filesystem/ext2/ext2_inode.cpp
index 1522387..8131f43 100644
--- a/kernel/src/filesystem/ext2/ext2_inode.cpp
+++ b/kernel/src/filesystem/ext2/ext2_inode.cpp
@@ -1,19 +1,21 @@
#include "kernel/filesystem/ext2/ext2_inode.hpp"
-#include "kernel/filesystem/ext2/ext2_file.hpp"
+#include "kernel/filesystem/disk_file.hpp"
#include "kernel/filesystem/file.hpp"
#include "kernel/filesystem/inode.hpp"
+#include "kernel/filesystem/inode_file.hpp"
#include <kstd/memory>
namespace filesystem::ext2
{
- ext2_inode::ext2_inode()
+ ext2_inode::ext2_inode(kstd::shared_ptr<disk_file> const & disk_file)
: inode(inode_kind::regular)
+ , m_disk_file(disk_file)
{}
auto ext2_inode::open_file() const -> kstd::shared_ptr<file>
{
- return kstd::make_shared<ext2_file>();
+ return kstd::make_shared<inode_file>(m_disk_file);
}
} // namespace filesystem::ext2 \ No newline at end of file
diff --git a/kernel/src/filesystem/inode_file.cpp b/kernel/src/filesystem/inode_file.cpp
new file mode 100644
index 0000000..9c351da
--- /dev/null
+++ b/kernel/src/filesystem/inode_file.cpp
@@ -0,0 +1,31 @@
+#include "kernel/filesystem/inode_file.hpp"
+
+#include "kapi/system.hpp"
+
+#include "kernel/filesystem/disk_file.hpp"
+
+#include <kstd/memory>
+
+#include <cstddef>
+
+namespace filesystem
+{
+ inode_file::inode_file(kstd::shared_ptr<disk_file> const & disk_file)
+ : m_disk_file(disk_file)
+ {
+ if (!m_disk_file)
+ {
+ kapi::system::panic("[FILESYSTEM] inode_file constructed with null disk_file.");
+ }
+ }
+
+ auto inode_file::read(void * buffer, size_t offset, size_t size) const -> size_t
+ {
+ return m_disk_file->read(buffer, offset, size);
+ }
+
+ auto inode_file::write(void const * buffer, size_t offset, size_t size) -> size_t
+ {
+ return m_disk_file->write(buffer, offset, size);
+ }
+} // namespace filesystem \ No newline at end of file