diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-07-24 08:38:38 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-07-24 08:38:38 +0200 |
| commit | e7b870fd2e1443785a2b36c92c6c604fa3399108 (patch) | |
| tree | 18c38e94968635b0549a99fc9edb43f8e3cfb837 | |
| parent | 3891e9588412ce3e6f3790fb5c08a7e7ef6f01af (diff) | |
| download | kernel-e7b870fd2e1443785a2b36c92c6c604fa3399108.tar.xz kernel-e7b870fd2e1443785a2b36c92c6c604fa3399108.zip | |
kernel/devfs: re-key devfs storage
| -rw-r--r-- | kernel/kernel/filesystem/devfs/filesystem.cpp | 22 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/devfs/filesystem.hpp | 4 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/devfs/filesystem.tests.cpp | 2 |
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]") { |
