#include #include #include #include #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 & backing_inode) -> kstd::shared_ptr { if (!backing_inode) { kapi::system::panic("[FILESYSTEM] cannot mount filesystem: backing inode is null."); } for (auto & factory : filesystem_factories) { auto fs = factory(); if (fs->mount(backing_inode) == operation_result::success) { return fs; } } return nullptr; } auto filesystem::mount(kstd::shared_ptr const & backing_inode) -> operation_result { if (!backing_inode) { kapi::system::panic("[FILESYSTEM] cannot mount filesystem: backing inode is null."); } m_backing_inode = backing_inode; return operation_result::success; } auto filesystem::root_inode() const -> kstd::shared_ptr const & { return m_root_inode; } auto filesystem::backing_inode() const -> kstd::shared_ptr const & { return m_backing_inode; } } // namespace kernel::filesystem