diff options
| author | marcel.braun <marcel.braun@ost.ch> | 2026-03-30 20:52:25 +0200 |
|---|---|---|
| committer | marcel.braun <marcel.braun@ost.ch> | 2026-03-30 21:23:21 +0200 |
| commit | 0b5084780e4a89dcaccbda5823495c9cdd62b006 (patch) | |
| tree | e16b464a3fbf302aa466ae763759e1e22261a143 /kernel/src/filesystem/devfs/filesystem.cpp | |
| parent | 55e37a219fc953d1675bc2edb8573c6d47df7647 (diff) | |
| download | teachos-0b5084780e4a89dcaccbda5823495c9cdd62b006.tar.xz teachos-0b5084780e4a89dcaccbda5823495c9cdd62b006.zip | |
Rename devfs filesystem files
Diffstat (limited to 'kernel/src/filesystem/devfs/filesystem.cpp')
| -rw-r--r-- | kernel/src/filesystem/devfs/filesystem.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/kernel/src/filesystem/devfs/filesystem.cpp b/kernel/src/filesystem/devfs/filesystem.cpp new file mode 100644 index 0000000..e7d0e13 --- /dev/null +++ b/kernel/src/filesystem/devfs/filesystem.cpp @@ -0,0 +1,58 @@ +#include "kernel/filesystem/devfs/filesystem.hpp" + +#include "kernel/devices/device.hpp" +#include "kernel/devices/storage/storage_management.hpp" +#include "kernel/filesystem/devfs/inode.hpp" +#include "kernel/filesystem/device_inode.hpp" +#include "kernel/filesystem/inode.hpp" + +#include <kstd/memory> + +#include <algorithm> +#include <string_view> + +namespace kernel::filesystem::devfs +{ + auto filesystem::mount(kstd::shared_ptr<devices::device> const &) -> int + { + m_root_inode = kstd::make_shared<inode>(); + build_device_inode_table(); + + return 0; + } + + auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) + -> kstd::shared_ptr<kernel::filesystem::inode> + { + if (!parent || !parent->is_directory()) + { + return nullptr; + } + + if (parent.get() != m_root_inode.get()) + { + return nullptr; + } + + auto it = std::ranges::find_if(m_inodes, [&](auto const & dev_node) { + auto device_inode_ptr = static_cast<device_inode *>(dev_node.get()); + if (!device_inode_ptr) + { + return false; + } + return device_inode_ptr->device()->name() == name; + }); + return (it != m_inodes.end()) ? *it : nullptr; + } + + auto filesystem::build_device_inode_table() -> void + { + m_inodes.clear(); + + auto storage_mgmt = devices::storage::storage_management::get(); + std::ranges::for_each(storage_mgmt.all_controllers(), [&](auto const & controller) { + std::ranges::for_each(controller->all_devices(), + [&](auto const & device) { m_inodes.push_back(kstd::make_shared<device_inode>(device)); }); + }); + } +} // namespace kernel::filesystem::devfs
\ No newline at end of file |
