aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem
diff options
context:
space:
mode:
authorLukas Oesch <lukasoesch20@gmail.com>2026-05-02 14:23:19 +0200
committerLukas Oesch <lukasoesch20@gmail.com>2026-05-05 14:38:52 +0200
commitd3c8b74020bfeee554394b7e41c58d5ddda6f396 (patch)
tree0633cde1c0b27b6335c3077d4a72edfb0b9d626a /kernel/src/filesystem
parent46f3992c10e960d33dbb314dad597650902686da (diff)
downloadkernel-d3c8b74020bfeee554394b7e41c58d5ddda6f396.tar.xz
kernel-d3c8b74020bfeee554394b7e41c58d5ddda6f396.zip
refactoring
Diffstat (limited to 'kernel/src/filesystem')
-rw-r--r--kernel/src/filesystem/dentry.cpp17
-rw-r--r--kernel/src/filesystem/vfs.cpp32
2 files changed, 19 insertions, 30 deletions
diff --git a/kernel/src/filesystem/dentry.cpp b/kernel/src/filesystem/dentry.cpp
index 572dd82..72500fd 100644
--- a/kernel/src/filesystem/dentry.cpp
+++ b/kernel/src/filesystem/dentry.cpp
@@ -5,6 +5,7 @@
#include <kapi/system.hpp>
#include <kstd/memory>
+#include <kstd/string>
#include <algorithm>
#include <cstdint>
@@ -38,6 +39,22 @@ namespace kernel::filesystem
return m_name.view();
}
+ // TODO BA-FS26 fix warning (do not use recursion)
+ auto dentry::get_full_path() const -> kstd::string
+ {
+ if (m_parent)
+ {
+ auto parent_path = m_parent->get_full_path();
+ if (parent_path != "/")
+ {
+ parent_path += '/';
+ }
+ return parent_path + m_name.view();
+ }
+
+ return m_name.empty() ? "/" : m_name.view();
+ }
+
auto dentry::add_child(kstd::shared_ptr<dentry> const & child) -> void
{
m_children.push_back(child);
diff --git a/kernel/src/filesystem/vfs.cpp b/kernel/src/filesystem/vfs.cpp
index 41afad3..9a6625d 100644
--- a/kernel/src/filesystem/vfs.cpp
+++ b/kernel/src/filesystem/vfs.cpp
@@ -11,7 +11,6 @@
#include <kstd/memory>
#include <kstd/string>
-#include <kstd/vector>
#include <optional>
#include <ranges>
@@ -156,25 +155,6 @@ namespace kernel::filesystem
}
auto current_dentry = current_mount->root_dentry();
- kstd::vector<std::string_view> resolved_parts{};
-
- // TODO BA-FS26 remove again an get path out of the dentires instead of building it up again here
- auto build_resolved_path = [&resolved_parts]() {
- kstd::string resolved_path{"/"};
-
- for (auto const & resolved_part : resolved_parts)
- {
- if (resolved_path.size() > 1)
- {
- resolved_path += '/';
- }
-
- resolved_path += resolved_part;
- }
-
- return resolved_path;
- };
-
std::string_view remaining = path.substr(current_mount->get_mount_path().size());
auto path_parts =
@@ -191,11 +171,6 @@ namespace kernel::filesystem
if (part_view == "..")
{
- if (!resolved_parts.empty())
- {
- resolved_parts.pop_back();
- }
-
auto parent_dentry = current_dentry->get_parent();
if (current_dentry == current_mount->root_dentry())
@@ -222,8 +197,6 @@ namespace kernel::filesystem
continue;
}
- resolved_parts.push_back(part_view);
-
auto next_dentry = current_dentry->find_child(part_view);
if (!next_dentry)
{
@@ -237,9 +210,8 @@ namespace kernel::filesystem
}
else if (next_dentry->has_flag(dentry::dentry_flags::mounted))
{
- // change the mount point
- // TODO BA-FS26 get resolved path out of the dentry...
- current_mount = m_mount_table.find_longest_prefix_mount(build_resolved_path().view());
+ // TODO BA-FS26 really do it like this? or just call "get" without longes_prefix stuff
+ current_mount = m_mount_table.find_longest_prefix_mount(next_dentry->get_full_path().view());
if (!current_mount)
{
kapi::system::panic("[FILESYSTEM] mount for dentry with mounted flag not found.");