diff options
Diffstat (limited to 'kernel/kernel/filesystem/filesystem.cpp')
| -rw-r--r-- | kernel/kernel/filesystem/filesystem.cpp | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/kernel/kernel/filesystem/filesystem.cpp b/kernel/kernel/filesystem/filesystem.cpp index 5cd7f9d5..d1e0e2a0 100644 --- a/kernel/kernel/filesystem/filesystem.cpp +++ b/kernel/kernel/filesystem/filesystem.cpp @@ -1,8 +1,8 @@ #include <kernel/filesystem/filesystem.hpp> #include <kernel/filesystem/error.hpp> -#include <kernel/filesystem/ext2/filesystem.hpp> #include <kernel/filesystem/inode.hpp> +#include <kernel/filesystem/type_registry.hpp> #include <kapi/system.hpp> @@ -10,30 +10,21 @@ #include <kstd/result.hpp> #include <kstd/system_error.hpp> -#include <array> - namespace kernel::filesystem { - namespace - { - // TODO: replace with filesystem type registry. - constexpr auto static filesystem_factories = std::array{ - []() { return kstd::make_shared<ext2::filesystem>(); }, - }; - } // namespace auto filesystem::probe_and_mount(kstd::shared_ptr<inode> const & backing_inode) -> kstd::result<kstd::shared_ptr<filesystem>> { - if (!backing_inode) + for (auto & type : type_registry::get().all()) { - kapi::system::panic("[FILESYSTEM] cannot mount filesystem: backing inode is null."); - } + if (!type || type->requires_inode() != static_cast<bool>(backing_inode)) + { + continue; + } + + auto fs = type->make_instance(); - // TODO: replace with filesystem type registry lookup. - for (auto & factory : filesystem_factories) - { - auto fs = factory(); if (fs->mount(backing_inode)) { return fs; |
