diff options
| author | Lukas Oesch <lukas.oesch@ost.ch> | 2026-06-10 10:40:46 +0200 |
|---|---|---|
| committer | Lukas Oesch <lukas.oesch@ost.ch> | 2026-06-10 10:40:46 +0200 |
| commit | 33abd5cf264cb9e34121082105b0bc17b3cf7a36 (patch) | |
| tree | 36b15d53fea04f4f9d9af817100f7ad013bd9b5c /kernel/src/filesystem/filesystem.cpp | |
| parent | d01caf1c4aef3c89c68b9d1cc9fe56445f0860b5 (diff) | |
| parent | 7e27130c342b7299a1d2188a7192a7f17b5ac2ad (diff) | |
| download | kernel-33abd5cf264cb9e34121082105b0bc17b3cf7a36.tar.xz kernel-33abd5cf264cb9e34121082105b0bc17b3cf7a36.zip | |
Merge of BA-FS26 branch into develop
See merge request teachos/kernel!49
Diffstat (limited to 'kernel/src/filesystem/filesystem.cpp')
| -rw-r--r-- | kernel/src/filesystem/filesystem.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/kernel/src/filesystem/filesystem.cpp b/kernel/src/filesystem/filesystem.cpp new file mode 100644 index 0000000..24d0e22 --- /dev/null +++ b/kernel/src/filesystem/filesystem.cpp @@ -0,0 +1,60 @@ +#include <kernel/filesystem/filesystem.hpp> + +#include <kernel/filesystem/ext2/filesystem.hpp> +#include <kernel/filesystem/inode.hpp> + +#include <kapi/system.hpp> + +#include <kstd/memory> + +#include <array> + +namespace kernel::filesystem +{ + namespace + { + 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::shared_ptr<filesystem> + { + 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<inode> 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<inode> const & + { + return m_root_inode; + } + + auto filesystem::backing_inode() const -> kstd::shared_ptr<inode> const & + { + return m_backing_inode; + } +} // namespace kernel::filesystem
\ No newline at end of file |
