diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-08-26 20:33:56 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-08-26 20:37:48 +0200 |
| commit | cd7e75423e2bcdace6ff5fc9fe7d5e8c5d2a0f1f (patch) | |
| tree | ded8e974e1bb67b802384e29bae04531afc00602 /kernel/kapi | |
| parent | 03788775fbebbb3669c115b7653af59194b167d3 (diff) | |
| download | kernel-cd7e75423e2bcdace6ff5fc9fe7d5e8c5d2a0f1f.tar.xz kernel-cd7e75423e2bcdace6ff5fc9fe7d5e8c5d2a0f1f.zip | |
kernel: split vfs and filesystem drivers
Diffstat (limited to 'kernel/kapi')
| -rw-r--r-- | kernel/kapi/filesystem.cpp | 41 | ||||
| -rw-r--r-- | kernel/kapi/filesystem.tests.cpp | 6 |
2 files changed, 21 insertions, 26 deletions
diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp index e4b3443a..e50ce2c0 100644 --- a/kernel/kapi/filesystem.cpp +++ b/kernel/kapi/filesystem.cpp @@ -1,10 +1,6 @@ #include <kapi/filesystem.hpp> -#include <kernel/filesystem/byte_offset_file_descriptor.hpp> -#include <kernel/filesystem/directory_file_descriptor.hpp> -#include <kernel/filesystem/open_file_descriptor.hpp> -#include <kernel/filesystem/open_file_table.hpp> -#include <kernel/filesystem/vfs.hpp> +#include <kernel/vfs.hpp> #include <kstd/memory.hpp> #include <kstd/result.hpp> @@ -20,77 +16,76 @@ namespace kapi::filesystem { auto mount(std::string_view source, std::string_view target) -> kstd::result<void> { - return kernel::filesystem::vfs::get().mount(source, target); + return kernel::vfs::vfs::get().mount(source, target); } auto umount(std::string_view target) -> kstd::result<void> { - return kernel::filesystem::vfs::get().unmount(target); + return kernel::vfs::vfs::get().unmount(target); } auto open(std::string_view path) -> kstd::result<std::size_t> { - return kernel::filesystem::vfs::get() + return kernel::vfs::vfs::get() .open(path) - .transform([](auto dentry) -> kstd::shared_ptr<kernel::filesystem::open_file_descriptor> { + .transform([](auto dentry) -> kstd::shared_ptr<kernel::vfs::open_file_descriptor> { if (dentry->inode()->is_directory()) { - return kstd::make_shared<kernel::filesystem::directory_file_descriptor>(dentry); + return kstd::make_shared<kernel::vfs::directory_file_descriptor>(dentry); } - return kstd::make_shared<kernel::filesystem::byte_offset_file_descriptor>(dentry); + return kstd::make_shared<kernel::vfs::byte_offset_file_descriptor>(dentry); }) - .and_then( - [](auto file_descriptor) { return kernel::filesystem::open_file_table::get().add_file(file_descriptor); }); + .and_then([](auto file_descriptor) { return kernel::vfs::open_file_table::get().add_file(file_descriptor); }); } auto close(size_t file_descriptor) -> kstd::result<void> { - return kernel::filesystem::open_file_table::get() + return kernel::vfs::open_file_table::get() .file(file_descriptor) .transform([](auto file) { return file->get_dentry()->absolute_path(); }) - .and_then([](auto path) { return kernel::filesystem::vfs::get().close(path); }) - .and_then([=]() { return kernel::filesystem::open_file_table::get().remove_file(file_descriptor); }); + .and_then([](auto path) { return kernel::vfs::vfs::get().close(path); }) + .and_then([=]() { return kernel::vfs::open_file_table::get().remove_file(file_descriptor); }); } auto read(size_t file_descriptor, std::span<std::byte> buffer) -> kstd::result<kstd::bytes> { - return kernel::filesystem::open_file_table::get().file(file_descriptor).and_then([=](auto descriptor) { + return kernel::vfs::open_file_table::get().file(file_descriptor).and_then([=](auto descriptor) { return descriptor->read(buffer); }); } auto write(size_t file_descriptor, std::span<std::byte const> buffer) -> kstd::result<kstd::bytes> { - return kernel::filesystem::open_file_table::get().file(file_descriptor).and_then([=](auto descriptor) { + return kernel::vfs::open_file_table::get().file(file_descriptor).and_then([=](auto descriptor) { return descriptor->write(buffer); }); } auto seek(size_t file_descriptor, kstd::offset offset, seek_origin origin) -> kstd::result<kstd::bytes> { - return kernel::filesystem::open_file_table::get().file(file_descriptor).and_then([=](auto file) { + return kernel::vfs::open_file_table::get().file(file_descriptor).and_then([=](auto file) { return file->seek(offset, origin); }); } auto mkdir(std::string_view path) -> kstd::result<void> { - return kernel::filesystem::vfs::get().mkdir(path); + return kernel::vfs::vfs::get().mkdir(path); } auto create(std::string_view path) -> kstd::result<void> { - return kernel::filesystem::vfs::get().create(path); + return kernel::vfs::vfs::get().create(path); } auto status(std::string_view path) -> kstd::result<file_status> { - return kernel::filesystem::vfs::get().status(path); + return kernel::vfs::vfs::get().status(path); } auto create_device_node(std::string_view path, file_type type, device_number number) -> kstd::result<void> { - return kernel::filesystem::vfs::get().create_device_node(path, static_cast<std::uint32_t>(type), number); + return kernel::vfs::vfs::get().create_device_node(path, static_cast<std::uint32_t>(type), number); } } // namespace kapi::filesystem
\ No newline at end of file diff --git a/kernel/kapi/filesystem.tests.cpp b/kernel/kapi/filesystem.tests.cpp index 2144af3a..d23255c3 100644 --- a/kernel/kapi/filesystem.tests.cpp +++ b/kernel/kapi/filesystem.tests.cpp @@ -1,6 +1,6 @@ #include <kapi/filesystem.hpp> -#include <kernel/test_support/filesystem/storage_boot_module_vfs_fixture.hpp> +#include <kernel/test_support/vfs/storage_boot_module_vfs_fixture.hpp> #include <kstd/system_error.hpp> #include <kstd/units.hpp> @@ -18,7 +18,7 @@ using namespace kstd::units_literals; // NOLINTBEGIN (readability-magic-numbers) -SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "Kapi filesystem with real images", +SCENARIO_METHOD(kernel::tests::vfs::storage_boot_module_vfs_fixture, "Kapi filesystem with real images", "[kapi][filesystem]") { auto const image_path_1 = std::filesystem::path{KERNEL_TEST_ASSETS_DIR} / "ext2_1KB_fs.img"; @@ -297,7 +297,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "Kap // NOTE: This must be it's own scenario, because it relies on concrete minor numbers, which in turn depend on global // singleton state that only resets on a new scenario. -SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, +SCENARIO_METHOD(kernel::tests::vfs::storage_boot_module_vfs_fixture, "Kapi filesystem resolves a persistent device node to the matching devfs entry", "[kapi][filesystem]") { auto image_path = std::filesystem::path{KERNEL_TEST_ASSETS_DIR} / "ext2_1KB_devnode_fs.img"; |
