aboutsummaryrefslogtreecommitdiff
path: root/kernel/src
diff options
context:
space:
mode:
authorLukas Oesch <lukasoesch20@gmail.com>2026-05-05 14:37:47 +0200
committerLukas Oesch <lukasoesch20@gmail.com>2026-05-05 14:38:53 +0200
commit2ab9d6ffbc4aad8ab3a393bd32191e3c07103c0a (patch)
tree12431e6abd1361740b85b4a7c22ab0af296a9d90 /kernel/src
parent9aaabb2cf73f20cc4d4c68588e7bf4592837626f (diff)
downloadkernel-2ab9d6ffbc4aad8ab3a393bd32191e3c07103c0a.tar.xz
kernel-2ab9d6ffbc4aad8ab3a393bd32191e3c07103c0a.zip
fix problem with string_view lifetime
Diffstat (limited to 'kernel/src')
-rw-r--r--kernel/src/filesystem/vfs.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/kernel/src/filesystem/vfs.cpp b/kernel/src/filesystem/vfs.cpp
index 06d36ce..03921df 100644
--- a/kernel/src/filesystem/vfs.cpp
+++ b/kernel/src/filesystem/vfs.cpp
@@ -167,15 +167,15 @@ namespace kernel::filesystem
while (!path_parts_vector.empty())
{
- std::string_view part_view{path_parts_vector.back()};
+ auto part = path_parts_vector.back();
path_parts_vector.pop_back();
- if (part_view == ".")
+ if (part == ".")
{
continue;
}
- if (part_view == "..")
+ if (part == "..")
{
auto parent_dentry = current_dentry->get_parent();
@@ -203,17 +203,17 @@ namespace kernel::filesystem
continue;
}
- auto next_dentry = current_dentry->find_child(part_view);
+ auto next_dentry = current_dentry->find_child(part.view());
if (!next_dentry)
{
auto current_fs = current_mount->get_filesystem();
- auto found_inode = current_fs->lookup(current_dentry->get_inode(), part_view);
+ auto found_inode = current_fs->lookup(current_dentry->get_inode(), part.view());
if (!found_inode)
{
return nullptr;
}
- next_dentry = kstd::make_shared<dentry>(current_dentry, found_inode, part_view);
+ next_dentry = kstd::make_shared<dentry>(current_dentry, found_inode, part.view());
current_dentry->add_child(next_dentry);
}
else if (next_dentry->has_flag(dentry::dentry_flags::mounted))
@@ -244,8 +244,9 @@ namespace kernel::filesystem
if (kernel::filesystem::path::is_valid_absolute_path(symbolic_link_path))
{
current_mount = m_mount_table.find_longest_prefix_mount("/");
- next_dentry = current_mount->root_dentry();
+ current_dentry = current_mount->root_dentry();
}
+ continue;
}
current_dentry = next_dentry;