aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/filesystem')
-rw-r--r--kernel/src/filesystem/rootfs/rootfs_filesystem.cpp9
-rw-r--r--kernel/src/filesystem/rootfs/rootfs_inode.cpp17
2 files changed, 24 insertions, 2 deletions
diff --git a/kernel/src/filesystem/rootfs/rootfs_filesystem.cpp b/kernel/src/filesystem/rootfs/rootfs_filesystem.cpp
index 22b1962..e819fc7 100644
--- a/kernel/src/filesystem/rootfs/rootfs_filesystem.cpp
+++ b/kernel/src/filesystem/rootfs/rootfs_filesystem.cpp
@@ -12,13 +12,18 @@ namespace filesystem::rootfs
{
auto rootfs_filesystem::mount(kstd::shared_ptr<devices::device> const & /*device*/) -> int
{
- m_root_inode = kstd::make_shared<rootfs_inode>();
+ auto rfs_inode = kstd::make_shared<rootfs_inode>();
+ rfs_inode->add_child("dev");
+ m_root_inode = rfs_inode;
+
return 0;
}
- auto rootfs_filesystem::lookup(kstd::shared_ptr<inode> const & /*parent*/, std::string_view /*name*/)
+ auto rootfs_filesystem::lookup(kstd::shared_ptr<inode> const & parent, std::string_view name)
-> kstd::shared_ptr<inode>
{
+ if (auto * rfs_inode = static_cast<rootfs_inode *>(parent.get()))
+ return rfs_inode->lookup_child(name);
return nullptr;
}
} // namespace filesystem::rootfs
diff --git a/kernel/src/filesystem/rootfs/rootfs_inode.cpp b/kernel/src/filesystem/rootfs/rootfs_inode.cpp
index ed057f7..9bbfbce 100644
--- a/kernel/src/filesystem/rootfs/rootfs_inode.cpp
+++ b/kernel/src/filesystem/rootfs/rootfs_inode.cpp
@@ -2,7 +2,13 @@
#include "kernel/filesystem/inode.hpp"
+#include <kstd/memory>
+#include <kstd/string>
+
+#include <algorithm>
#include <cstddef>
+#include <string_view>
+#include <utility>
namespace filesystem::rootfs
{
@@ -19,4 +25,15 @@ namespace filesystem::rootfs
{
return 0;
}
+
+ auto rootfs_inode::add_child(std::string_view name) -> void
+ {
+ m_children.push_back(std::make_pair(kstd::string{name}, kstd::make_shared<rootfs_inode>()));
+ }
+
+ auto rootfs_inode::lookup_child(std::string_view name) -> kstd::shared_ptr<inode>
+ {
+ auto it = std::ranges::find_if(m_children, [&](auto const & pair) { return pair.first == name; });
+ return (it != m_children.end()) ? it->second : nullptr;
+ }
} // namespace filesystem::rootfs