aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem
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 /kernel/src/filesystem
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
Diffstat (limited to 'kernel/src/filesystem')
-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
6 files changed, 43 insertions, 80 deletions
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};
}