#include "kernel/filesystem/filesystem.hpp" #include "kapi/devices/device.hpp" #include "kapi/system.hpp" #include "kernel/filesystem/ext2/filesystem.hpp" #include "kernel/filesystem/inode.hpp" #include #include namespace kernel::filesystem { namespace { constexpr auto static filesystem_factories = std::array{ []() { return kstd::make_shared(); }, }; } // namespace auto filesystem::probe_and_mount(kstd::shared_ptr const & device) -> kstd::shared_ptr { if (!device) { kapi::system::panic("[FILESYSTEM] cannot mount filesystem: device is null."); } for (auto & factory : filesystem_factories) { auto fs = factory(); if (fs->mount(device) == 0) { return fs; } } kapi::system::panic("[FILESYSTEM] cannot mount filesystem: no suitable filesystem found on device."); } auto filesystem::mount(kstd::shared_ptr const & device) -> int { m_device = device; return 0; } auto filesystem::root_inode() const -> kstd::shared_ptr const & { return m_root_inode; } } // namespace kernel::filesystem