aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem/dentry.cpp
diff options
context:
space:
mode:
authormarcel.braun <marcel.braun@ost.ch>2026-03-23 21:41:37 +0100
committerLukas Oesch <lukasoesch20@gmail.com>2026-03-26 21:18:55 +0100
commitfbb4eefce7bf825b0406f6fa63de318153a3b95a (patch)
tree6be6701f47ecfd1b63dde39f3f8da2b8d953d45e /kernel/src/filesystem/dentry.cpp
parent336b25458b75e28c93c0bab23ccd359042f9df41 (diff)
downloadteachos-fbb4eefce7bf825b0406f6fa63de318153a3b95a.tar.xz
teachos-fbb4eefce7bf825b0406f6fa63de318153a3b95a.zip
Implement resolve_path
Diffstat (limited to 'kernel/src/filesystem/dentry.cpp')
-rw-r--r--kernel/src/filesystem/dentry.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/kernel/src/filesystem/dentry.cpp b/kernel/src/filesystem/dentry.cpp
index e498b52..76949f2 100644
--- a/kernel/src/filesystem/dentry.cpp
+++ b/kernel/src/filesystem/dentry.cpp
@@ -6,12 +6,15 @@
#include <kstd/memory>
+#include <algorithm>
#include <cstdint>
+#include <string_view>
namespace filesystem
{
- dentry::dentry(kstd::shared_ptr<dentry> const & parent, kstd::shared_ptr<inode> const & node)
- : m_parent(parent)
+ dentry::dentry(kstd::shared_ptr<dentry> const & parent, kstd::shared_ptr<inode> const & node, std::string_view name)
+ : m_name(name)
+ , m_parent(parent)
, m_inode(node)
{
if (!m_inode)
@@ -30,6 +33,17 @@ namespace filesystem
return m_parent;
}
+ auto dentry::add_child(kstd::shared_ptr<dentry> const & child) -> void
+ {
+ m_children.push_back(child);
+ }
+
+ auto dentry::find_child(std::string_view name) const -> kstd::shared_ptr<dentry>
+ {
+ auto it = std::ranges::find_if(m_children, [&](auto const & child) { return child->m_name == name; });
+ return (it != m_children.end()) ? *it : nullptr;
+ }
+
auto dentry::set_flag(dentry_flags flag) -> void
{
m_flags |= static_cast<uint32_t>(flag);