diff options
Diffstat (limited to 'kernel/src/filesystem/dentry.cpp')
| -rw-r--r-- | kernel/src/filesystem/dentry.cpp | 27 |
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 |
