aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem
diff options
context:
space:
mode:
authorMarcel Braun <marcel.braun@ost.ch>2026-05-14 16:59:56 +0200
committerLukas Oesch <lukasoesch20@gmail.com>2026-05-16 11:56:07 +0200
commit216ec44cf2fdc914ce38e3ab56eb3a8d82b54c77 (patch)
tree9cb47ca5b25cd521c083b7a5429a182ce67f63c5 /kernel/src/filesystem
parentc6953852b9e10823830688bdfb269650b080f1bb (diff)
downloadkernel-216ec44cf2fdc914ce38e3ab56eb3a8d82b54c77.tar.xz
kernel-216ec44cf2fdc914ce38e3ab56eb3a8d82b54c77.zip
Refactor resolve_path
Diffstat (limited to 'kernel/src/filesystem')
-rw-r--r--kernel/src/filesystem/vfs.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/kernel/src/filesystem/vfs.cpp b/kernel/src/filesystem/vfs.cpp
index f5d57be..52ffcc8 100644
--- a/kernel/src/filesystem/vfs.cpp
+++ b/kernel/src/filesystem/vfs.cpp
@@ -20,6 +20,7 @@
#include <optional>
#include <ranges>
#include <string_view>
+#include <utility>
namespace
{
@@ -165,11 +166,11 @@ namespace kernel::filesystem
}
}
- auto vfs::resolve_path(std::string_view path) -> kstd::shared_ptr<dentry>
+ auto vfs::resolve_path_internal(std::string_view path) -> std::pair<kstd::shared_ptr<dentry>, kstd::shared_ptr<mount>>
{
if (!path::is_valid_absolute_path(path))
{
- return nullptr;
+ return {nullptr, nullptr};
}
auto current_mount = m_mount_table.find_exact_mount("/");
@@ -225,7 +226,7 @@ namespace kernel::filesystem
auto found_inode = current_fs->lookup(current_dentry->get_inode(), part.view());
if (!found_inode)
{
- return nullptr;
+ return {nullptr, nullptr};
}
next_dentry = kstd::make_shared<dentry>(current_dentry, found_inode, part.view());
@@ -246,7 +247,7 @@ namespace kernel::filesystem
{
if (symlink_counter++ > constants::symloop_max)
{
- return nullptr;
+ return {nullptr, nullptr};
}
kstd::vector<uint8_t> buffer(constants::symlink_max_path_length);
@@ -269,9 +270,19 @@ namespace kernel::filesystem
current_dentry = next_dentry;
}
+ return {current_dentry, current_mount};
+ }
+
+ auto vfs::resolve_path(std::string_view path) -> kstd::shared_ptr<dentry>
+ {
+ return resolve_path_internal(path).first;
+ }
- return current_dentry;
+ auto vfs::find_mount(std::string_view path) -> kstd::shared_ptr<mount>
+ {
+ return resolve_path_internal(path).second;
}
+
} // namespace kernel::filesystem
namespace kernel::tests::filesystem::vfs