diff options
| author | Marcel Braun <marcel.braun@ost.ch> | 2026-05-14 16:59:56 +0200 |
|---|---|---|
| committer | Lukas Oesch <lukasoesch20@gmail.com> | 2026-05-16 11:56:07 +0200 |
| commit | 216ec44cf2fdc914ce38e3ab56eb3a8d82b54c77 (patch) | |
| tree | 9cb47ca5b25cd521c083b7a5429a182ce67f63c5 /kernel/src | |
| parent | c6953852b9e10823830688bdfb269650b080f1bb (diff) | |
| download | kernel-216ec44cf2fdc914ce38e3ab56eb3a8d82b54c77.tar.xz kernel-216ec44cf2fdc914ce38e3ab56eb3a8d82b54c77.zip | |
Refactor resolve_path
Diffstat (limited to 'kernel/src')
| -rw-r--r-- | kernel/src/filesystem/vfs.cpp | 21 |
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 |
