diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-08-23 15:23:28 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-08-26 11:16:17 +0200 |
| commit | 5abb324bb68dfc7608919497a725047956e70c14 (patch) | |
| tree | 0df4cf9d5e632acff12dcfaaba6666437ca9ad8f /kernel | |
| parent | 65dc3bd125da94b7faa73e925ea886b617978cd9 (diff) | |
| download | kernel-5abb324bb68dfc7608919497a725047956e70c14.tar.xz kernel-5abb324bb68dfc7608919497a725047956e70c14.zip | |
kernel/fs: devfs: simplify implementation
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/kernel/filesystem/devfs/filesystem.cpp | 37 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/devfs/filesystem.hpp | 9 |
2 files changed, 11 insertions, 35 deletions
diff --git a/kernel/kernel/filesystem/devfs/filesystem.cpp b/kernel/kernel/filesystem/devfs/filesystem.cpp index 3e94f2ac..640a01db 100644 --- a/kernel/kernel/filesystem/devfs/filesystem.cpp +++ b/kernel/kernel/filesystem/devfs/filesystem.cpp @@ -10,7 +10,6 @@ #include <kapi/filesystem.hpp> -#include <kstd/flat_map.hpp> #include <kstd/memory.hpp> #include <kstd/result.hpp> #include <kstd/system_error.hpp> @@ -51,16 +50,6 @@ namespace kernel::filesystem::devfs auto filesystem::mount(inode_ptr const &) -> kstd::result<mount_result> { m_root_inode = kstd::make_shared<inode>(); - - std::ranges::for_each(device_number_registry::get().all(), [&](auto const & numbered) { - if (auto device = numbered.device.lock()) - { - m_inodes.emplace(numbered.name, kstd::make_shared<device_inode>(device)); - } - }); - - device_number_registry::get().subscribe(shared_from_this()); - return mount_result{m_root_inode, nullptr}; } @@ -82,10 +71,17 @@ namespace kernel::filesystem::devfs return kstd::failure(vfs_errc::invalid_inode); } - auto found = std::ranges::find_if(m_inodes, [&](auto const & entry) { return entry.first == name; }); - if (found != m_inodes.end()) + auto entries = device_number_registry::get().all(); + auto found = std::ranges::find_if(entries, [&](auto const & entry) { return entry.name == name; }); + + if (found == entries.end()) + { + return kstd::failure(vfs_errc::no_such_file_or_directory); + } + + if (auto device = found->device.lock()) { - return found->second; + return kstd::make_shared<device_inode>(device); } return kstd::failure(vfs_errc::no_such_file_or_directory); @@ -97,17 +93,4 @@ namespace kernel::filesystem::devfs return kstd::failure(vfs_errc::read_only_file_system); } - auto filesystem::on_device_numbered(device_number_registry::entry const & numbered) -> void - { - if (auto device = numbered.device.lock()) - { - m_inodes.emplace(numbered.name, kstd::make_shared<device_inode>(device)); - } - } - - auto filesystem::on_device_unnumbered(device_number_registry::entry const & numbered) -> void - { - erase_if(m_inodes, [&](auto const & entry) { return entry.first == numbered.name; }); - } - } // namespace kernel::filesystem::devfs
\ No newline at end of file diff --git a/kernel/kernel/filesystem/devfs/filesystem.hpp b/kernel/kernel/filesystem/devfs/filesystem.hpp index 7529cd28..147cb692 100644 --- a/kernel/kernel/filesystem/devfs/filesystem.hpp +++ b/kernel/kernel/filesystem/devfs/filesystem.hpp @@ -8,7 +8,6 @@ #include <kapi/filesystem.hpp> -#include <kstd/flat_map.hpp> #include <kstd/memory.hpp> #include <kstd/result.hpp> #include <kstd/string.hpp> @@ -26,9 +25,7 @@ namespace kernel::filesystem::devfs //! applications to interact with devices using standard file operations. The devfs filesystem dynamically creates //! inodes for devices registered in the system, enabling seamless access to device functionality through the //! filesystem interface. - struct filesystem : kernel::filesystem::filesystem, - kstd::enable_shared_from_this<filesystem>, - device_number_registry_observer + struct filesystem : kernel::filesystem::filesystem { auto mount(inode_ptr const & backing_inode) -> kstd::result<mount_result> override; @@ -43,11 +40,7 @@ namespace kernel::filesystem::devfs -> kstd::result<inode_ptr> override; private: - auto on_device_numbered(device_number_registry::entry const & numbered) -> void override; - auto on_device_unnumbered(device_number_registry::entry const & numbered) -> void override; - inode_ptr m_root_inode{}; - kstd::flat_map<kstd::string, kstd::shared_ptr<device_inode>> m_inodes{}; }; } // namespace kernel::filesystem::devfs |
