aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem/dentry.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/filesystem/dentry.cpp')
-rw-r--r--kernel/src/filesystem/dentry.cpp27
1 files changed, 19 insertions, 8 deletions
diff --git a/kernel/src/filesystem/dentry.cpp b/kernel/src/filesystem/dentry.cpp
index 1cf8730..a77ce23 100644
--- a/kernel/src/filesystem/dentry.cpp
+++ b/kernel/src/filesystem/dentry.cpp
@@ -22,6 +22,10 @@ namespace kernel::filesystem
{
kapi::system::panic("[FILESYSTEM] dentry constructed with null inode.");
}
+ if (m_name.empty())
+ {
+ kapi::system::panic("[FILESYSTEM] dentry constructed with empty name.");
+ }
}
auto dentry::get_inode() const -> kstd::shared_ptr<inode> const &
@@ -39,20 +43,27 @@ namespace kernel::filesystem
return m_name.view();
}
- // NOLINTNEXTLINE(misc-no-recursion)
- auto dentry::get_full_path() const -> kstd::string
+ auto dentry::get_absolute_path() const -> kstd::string
{
- if (m_parent)
+ kstd::string path = m_name;
+
+ auto parent = m_parent;
+ while (parent)
{
- auto parent_path = m_parent->get_full_path();
- if (parent_path != "/")
+ auto parent_name = parent->m_name;
+ if (parent_name == "/")
{
- parent_path += '/';
+ path = "/" + path;
}
- return parent_path + m_name.view();
+ else
+ {
+ path = parent_name + "/" + path;
+ }
+
+ parent = parent->m_parent;
}
- return m_name.view();
+ return path;
}
auto dentry::add_child(kstd::shared_ptr<dentry> const & child) -> void