aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kernel/filesystem/devfs/filesystem.cpp22
-rw-r--r--kernel/kernel/filesystem/devfs/filesystem.hpp4
-rw-r--r--kernel/kernel/filesystem/devfs/filesystem.tests.cpp2
3 files changed, 11 insertions, 17 deletions
diff --git a/kernel/kernel/filesystem/devfs/filesystem.cpp b/kernel/kernel/filesystem/devfs/filesystem.cpp
index e7874372..b97884e6 100644
--- a/kernel/kernel/filesystem/devfs/filesystem.cpp
+++ b/kernel/kernel/filesystem/devfs/filesystem.cpp
@@ -9,14 +9,14 @@
#include <kernel/filesystem/type.hpp>
#include <kernel/filesystem/vfs_types.hpp>
-#include <kapi/devices.hpp>
#include <kapi/filesystem.hpp>
+#include <kstd/flat_map.hpp>
#include <kstd/memory.hpp>
#include <kstd/result.hpp>
+#include <kstd/string.hpp>
#include <kstd/system_error.hpp>
-#include <algorithm>
#include <optional>
#include <string_view>
@@ -69,17 +69,10 @@ namespace kernel::filesystem::devfs
return kstd::failure(vfs_errc::invalid_inode);
}
- auto it = std::ranges::find_if(m_inodes, [&](auto const & dev_node) {
- if (auto device_inode_ptr = static_cast<device_inode *>(dev_node.get()))
- {
- return device_inode_ptr->device()->name() == name;
- }
- return false;
- });
-
- if (it != m_inodes.end())
+ auto found = m_inodes.find(kstd::string{name});
+ if (found != m_inodes.end())
{
- return *it;
+ return found->second;
}
return kstd::failure(vfs_errc::no_such_file_or_directory);
@@ -94,13 +87,14 @@ namespace kernel::filesystem::devfs
auto filesystem::build_device_inode_table() -> void
{
- m_inodes.clear();
+ // TODO: implement clear on flat_map
+ m_inodes = kstd::flat_map<kstd::string, kstd::shared_ptr<device_inode>>{};
for (auto const & entry : device_number_registry::get().all())
{
if (auto device = entry.device.lock())
{
- m_inodes.push_back(kstd::make_shared<device_inode>(device));
+ m_inodes.emplace(entry.name, kstd::make_shared<device_inode>(device));
}
}
}
diff --git a/kernel/kernel/filesystem/devfs/filesystem.hpp b/kernel/kernel/filesystem/devfs/filesystem.hpp
index 7e58cd83..abc4975a 100644
--- a/kernel/kernel/filesystem/devfs/filesystem.hpp
+++ b/kernel/kernel/filesystem/devfs/filesystem.hpp
@@ -8,8 +8,10 @@
#include <kapi/filesystem.hpp>
+#include <kstd/flat_map.hpp>
#include <kstd/memory.hpp>
#include <kstd/result.hpp>
+#include <kstd/string.hpp>
#include <kstd/system_error.hpp>
#include <kstd/vector.hpp>
@@ -44,7 +46,7 @@ namespace kernel::filesystem::devfs
private:
auto build_device_inode_table() -> void;
- kstd::vector<kstd::shared_ptr<device_inode>> m_inodes{};
+ kstd::flat_map<kstd::string, kstd::shared_ptr<device_inode>> m_inodes{};
};
} // namespace kernel::filesystem::devfs
diff --git a/kernel/kernel/filesystem/devfs/filesystem.tests.cpp b/kernel/kernel/filesystem/devfs/filesystem.tests.cpp
index b37b3800..93805440 100644
--- a/kernel/kernel/filesystem/devfs/filesystem.tests.cpp
+++ b/kernel/kernel/filesystem/devfs/filesystem.tests.cpp
@@ -6,8 +6,6 @@
#include <catch2/catch_test_macros.hpp>
-#include <optional>
-
SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture,
"Devfs filesystem lookup uses storage management devices", "[filesystem][devfs][filesystem]")
{