aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Oesch <lukasoesch20@gmail.com>2026-03-19 22:58:31 +0100
committerLukas Oesch <lukasoesch20@gmail.com>2026-03-26 21:17:23 +0100
commit09e3d0cb2272e7eabd79a320c17c58124515d427 (patch)
treeb48f75b2a2852af3abca953bb3d6320a4f97418c
parent8d3471f1d160d301f9d990455bd8c63450df1cf3 (diff)
downloadteachos-09e3d0cb2272e7eabd79a320c17c58124515d427.tar.xz
teachos-09e3d0cb2272e7eabd79a320c17c58124515d427.zip
first try to simplify the architecture (remove redundant inode_file and open() methods), add ext2_file placeholder struct
-rw-r--r--kernel/CMakeLists.txt2
-rw-r--r--kernel/include/kernel/filesystem/device_file.hpp2
-rw-r--r--kernel/include/kernel/filesystem/device_inode.hpp8
-rw-r--r--kernel/include/kernel/filesystem/ext2/ext2_file.hpp17
-rw-r--r--kernel/include/kernel/filesystem/ext2/ext2_inode.hpp10
-rw-r--r--kernel/include/kernel/filesystem/file.hpp2
-rw-r--r--kernel/include/kernel/filesystem/inode.hpp7
-rw-r--r--kernel/include/kernel/filesystem/inode_file.hpp27
-rw-r--r--kernel/src/filesystem/device_file.cpp5
-rw-r--r--kernel/src/filesystem/device_inode.cpp32
-rw-r--r--kernel/src/filesystem/ext2/ext2_file.cpp20
-rw-r--r--kernel/src/filesystem/ext2/ext2_inode.cpp17
-rw-r--r--kernel/src/filesystem/inode_file.cpp35
-rw-r--r--kernel/src/filesystem/vfs.cpp14
14 files changed, 75 insertions, 123 deletions
diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt
index a36eac0..a8287ba 100644
--- a/kernel/CMakeLists.txt
+++ b/kernel/CMakeLists.txt
@@ -21,6 +21,7 @@ add_executable("kernel"
"src/devices/storage/storage_management.cpp"
"src/devices/storage/ram_disk/ram_disk_controller.cpp"
"src/devices/storage/ram_disk/ram_disk_device.cpp"
+ "src/filesystem/ext2/ext2_file.cpp"
"src/filesystem/ext2/ext2_filesystem.cpp"
"src/filesystem/ext2/ext2_inode.cpp"
"src/filesystem/custody.cpp"
@@ -28,7 +29,6 @@ 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/device_file.hpp b/kernel/include/kernel/filesystem/device_file.hpp
index 06aa9b2..ff803f8 100644
--- a/kernel/include/kernel/filesystem/device_file.hpp
+++ b/kernel/include/kernel/filesystem/device_file.hpp
@@ -15,8 +15,6 @@ namespace filesystem
{
explicit device_file(kstd::shared_ptr<devices::device> const & device);
- auto open() -> void override;
-
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/device_inode.hpp b/kernel/include/kernel/filesystem/device_inode.hpp
index 0287875..c38c75b 100644
--- a/kernel/include/kernel/filesystem/device_inode.hpp
+++ b/kernel/include/kernel/filesystem/device_inode.hpp
@@ -2,22 +2,18 @@
#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>
-#include <cstddef>
-
namespace filesystem
{
struct device_inode : inode
{
explicit device_inode(kstd::shared_ptr<devices::device> const & device);
- [[nodiscard]] auto backing_device() const -> kstd::shared_ptr<devices::device> const &;
-
- 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;
+ [[nodiscard]] auto open_file() const -> kstd::shared_ptr<file> override;
private:
kstd::shared_ptr<devices::device> m_device{};
diff --git a/kernel/include/kernel/filesystem/ext2/ext2_file.hpp b/kernel/include/kernel/filesystem/ext2/ext2_file.hpp
new file mode 100644
index 0000000..b5708d8
--- /dev/null
+++ b/kernel/include/kernel/filesystem/ext2/ext2_file.hpp
@@ -0,0 +1,17 @@
+#ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILE_HPP
+#define TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILE_HPP
+
+#include "kernel/filesystem/file.hpp"
+
+#include <cstddef>
+
+namespace filesystem::ext2
+{
+ struct ext2_file : 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;
+ };
+} // namespace filesystem::ext2
+
+#endif \ No newline at end of file
diff --git a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp
index 7cd6f8f..f103877 100644
--- a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp
+++ b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp
@@ -1,13 +1,21 @@
#ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP
#define TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP
+#include "kernel/filesystem/file.hpp"
#include "kernel/filesystem/inode.hpp"
+#include <kstd/memory>
+
namespace filesystem::ext2
{
struct ext2_inode : inode
{
- // TODO BA-FS26
+ ext2_inode();
+
+ [[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.)
};
} // namespace filesystem::ext2
diff --git a/kernel/include/kernel/filesystem/file.hpp b/kernel/include/kernel/filesystem/file.hpp
index e7e1b12..5a41fab 100644
--- a/kernel/include/kernel/filesystem/file.hpp
+++ b/kernel/include/kernel/filesystem/file.hpp
@@ -9,8 +9,6 @@ namespace filesystem
{
virtual ~file() = default;
- virtual auto open() -> void = 0;
-
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;
};
diff --git a/kernel/include/kernel/filesystem/inode.hpp b/kernel/include/kernel/filesystem/inode.hpp
index dcf83b9..79cbcf9 100644
--- a/kernel/include/kernel/filesystem/inode.hpp
+++ b/kernel/include/kernel/filesystem/inode.hpp
@@ -1,9 +1,9 @@
#ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP
#define TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP
-#include <kstd/memory>
+#include "kernel/filesystem/file.hpp"
-#include <cstddef>
+#include <kstd/memory>
namespace filesystem
{
@@ -24,8 +24,7 @@ namespace filesystem
[[nodiscard]] auto is_regular() const -> bool;
[[nodiscard]] auto is_device() const -> bool;
- 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;
+ [[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
deleted file mode 100644
index ee84eee..0000000
--- a/kernel/include/kernel/filesystem/inode_file.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_FILE_HPP
-#define TEACH_OS_KERNEL_FILESYSTEM_INODE_FILE_HPP
-
-#include "kernel/filesystem/file.hpp"
-#include "kernel/filesystem/inode.hpp"
-
-#include <kstd/memory>
-
-#include <cstddef>
-
-namespace filesystem
-{
- struct inode_file : file
- {
- explicit inode_file(kstd::shared_ptr<inode> const & inode);
-
- auto open() -> void override;
-
- 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<inode> m_inode;
- };
-} // namespace filesystem
-
-#endif \ No newline at end of file
diff --git a/kernel/src/filesystem/device_file.cpp b/kernel/src/filesystem/device_file.cpp
index c6db5af..48ed20d 100644
--- a/kernel/src/filesystem/device_file.cpp
+++ b/kernel/src/filesystem/device_file.cpp
@@ -23,11 +23,6 @@ namespace filesystem
}
}
- auto device_file::open() -> void
- {
- // Hook point for permission checks or lazy metadata loading.
- }
-
auto device_file::read(void * buffer, size_t offset, size_t size) const -> size_t
{
if (m_device->is_block_device())
diff --git a/kernel/src/filesystem/device_inode.cpp b/kernel/src/filesystem/device_inode.cpp
index 18e3b24..592637d 100644
--- a/kernel/src/filesystem/device_inode.cpp
+++ b/kernel/src/filesystem/device_inode.cpp
@@ -3,12 +3,12 @@
#include "kapi/system.hpp"
#include "kernel/devices/device.hpp"
+#include "kernel/filesystem/device_file.hpp"
+#include "kernel/filesystem/file.hpp"
#include "kernel/filesystem/inode.hpp"
#include <kstd/memory>
-#include <cstddef>
-
namespace filesystem
{
device_inode::device_inode(kstd::shared_ptr<devices::device> const & device)
@@ -21,32 +21,8 @@ namespace filesystem
}
}
- auto device_inode::backing_device() const -> kstd::shared_ptr<devices::device> const &
- {
- return m_device;
- }
-
- auto device_inode::read(void * /*buffer*/, size_t /*offset*/, size_t /*size*/) const -> size_t
+ auto device_inode::open_file() const -> kstd::shared_ptr<file>
{
- if (!m_device)
- {
- kapi::system::panic("[FILESYSTEM] device_inode has null device.");
- }
-
- // TODO BA-FS26 use device file?
- // return m_device->read(buffer, offset, size);
- return 0;
- }
-
- auto device_inode::write(void const * /*buffer*/, size_t /*offset*/, size_t /*size*/) -> size_t
- {
- if (!m_device)
- {
- kapi::system::panic("[FILESYSTEM] device_inode has null device.");
- }
-
- // TODO BA-FS26 use device file?
- // return m_device->write(buffer, offset, size);
- return 0;
+ return kstd::make_shared<device_file>(m_device);
}
} // namespace filesystem \ No newline at end of file
diff --git a/kernel/src/filesystem/ext2/ext2_file.cpp b/kernel/src/filesystem/ext2/ext2_file.cpp
new file mode 100644
index 0000000..7217c77
--- /dev/null
+++ b/kernel/src/filesystem/ext2/ext2_file.cpp
@@ -0,0 +1,20 @@
+#include "kernel/filesystem/ext2/ext2_file.hpp"
+
+#include "kapi/system.hpp"
+
+#include <cstddef>
+
+namespace filesystem::ext2
+{
+ auto ext2_file::read(void * /*buffer*/, size_t /*offset*/, size_t /*size*/) const -> size_t
+ {
+ kapi::system::panic("[FILESYSTEM] ext2_file::read is not implemented yet.");
+ return 0;
+ }
+
+ auto ext2_file::write(void const * /*buffer*/, size_t /*offset*/, size_t /*size*/) -> size_t
+ {
+ kapi::system::panic("[FILESYSTEM] ext2_file::write is not implemented yet.");
+ return 0;
+ }
+} // namespace filesystem::ext2
diff --git a/kernel/src/filesystem/ext2/ext2_inode.cpp b/kernel/src/filesystem/ext2/ext2_inode.cpp
index ec68ee9..1522387 100644
--- a/kernel/src/filesystem/ext2/ext2_inode.cpp
+++ b/kernel/src/filesystem/ext2/ext2_inode.cpp
@@ -1,6 +1,19 @@
#include "kernel/filesystem/ext2/ext2_inode.hpp"
+#include "kernel/filesystem/ext2/ext2_file.hpp"
+#include "kernel/filesystem/file.hpp"
+#include "kernel/filesystem/inode.hpp"
+
+#include <kstd/memory>
+
namespace filesystem::ext2
{
- // TODO BA-FS26: Implement ext2 inode
-} \ No newline at end of file
+ ext2_inode::ext2_inode()
+ : inode(inode_kind::regular)
+ {}
+
+ auto ext2_inode::open_file() const -> kstd::shared_ptr<file>
+ {
+ return kstd::make_shared<ext2_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
deleted file mode 100644
index 7abac7b..0000000
--- a/kernel/src/filesystem/inode_file.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-#include "kernel/filesystem/inode_file.hpp"
-
-#include "kapi/system.hpp"
-
-#include "kernel/filesystem/inode.hpp"
-
-#include <kstd/memory>
-
-#include <cstddef>
-
-namespace filesystem
-{
- inode_file::inode_file(kstd::shared_ptr<inode> const & inode)
- : m_inode(inode)
- {
- if (!m_inode)
- {
- kapi::system::panic("[FILESYSTEM] inode_file constructed with null inode");
- }
- }
-
- auto inode_file::open() -> void
- {
- // Hook point for permission checks or lazy metadata loading.
- }
-
- auto inode_file::read(void * buffer, size_t offset, size_t size) const -> size_t
- {
- return m_inode->read(buffer, offset, size);
- }
- auto inode_file::write(void const * buffer, size_t offset, size_t size) -> size_t
- {
- return m_inode->write(buffer, offset, size);
- }
-} // namespace filesystem \ No newline at end of file
diff --git a/kernel/src/filesystem/vfs.cpp b/kernel/src/filesystem/vfs.cpp
index 188da6d..4b0c7d7 100644
--- a/kernel/src/filesystem/vfs.cpp
+++ b/kernel/src/filesystem/vfs.cpp
@@ -5,11 +5,8 @@
#include "kernel/devices/device.hpp"
#include "kernel/devices/storage/storage_management.hpp"
#include "kernel/filesystem/custody.hpp"
-#include "kernel/filesystem/device_file.hpp"
#include "kernel/filesystem/device_inode.hpp"
#include "kernel/filesystem/ext2/ext2_filesystem.hpp"
-#include "kernel/filesystem/inode.hpp"
-#include "kernel/filesystem/inode_file.hpp"
#include "kernel/filesystem/mount.hpp"
#include "kernel/filesystem/open_file_description.hpp"
@@ -71,16 +68,13 @@ namespace filesystem
if (auto custody = resolve_path(path))
{
auto node = custody->get_inode();
- if (node->is_device())
+
+ auto current_inode_file = node->open_file();
+ if (!current_inode_file)
{
- auto device_node = static_cast<device_inode *>(node.get());
- auto current_device_file = kstd::make_shared<device_file>(device_node->backing_device());
- current_device_file->open();
- return open_file_description{current_device_file};
+ kapi::system::panic("[FILESYSTEM] inode::open_file returned null file.");
}
- auto current_inode_file = kstd::make_shared<inode_file>(node);
- current_inode_file->open();
return open_file_description{current_inode_file};
}