diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-08-27 12:33:31 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-08-27 12:33:41 +0200 |
| commit | 0e72a1b27df2008013f2ee9c468a88c3e3843fae (patch) | |
| tree | f06177db1d52fb5ea1afa84c78e4b1094f5c55f0 /kernel/kapi | |
| parent | c9711c4ea8e5fccc23255e9f6ae86b15006aa6ea (diff) | |
| download | kernel-0e72a1b27df2008013f2ee9c468a88c3e3843fae.tar.xz kernel-0e72a1b27df2008013f2ee9c468a88c3e3843fae.zip | |
kapi/fs: implement read_directory
This change also replaces the kernel internal directory_listing_cursor
and directory_listing_entry with the kapi types directory_cursor and
directory_entry.
Diffstat (limited to 'kernel/kapi')
| -rw-r--r-- | kernel/kapi/filesystem.cpp | 12 | ||||
| -rw-r--r-- | kernel/kapi/filesystem.tests.cpp | 8 |
2 files changed, 11 insertions, 9 deletions
diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp index 7a0c2728..2f3c524e 100644 --- a/kernel/kapi/filesystem.cpp +++ b/kernel/kapi/filesystem.cpp @@ -4,7 +4,6 @@ #include <kstd/memory.hpp> #include <kstd/result.hpp> -#include <kstd/system_error.hpp> #include <kstd/units.hpp> #include <cstddef> @@ -12,7 +11,6 @@ #include <expected> #include <span> #include <string_view> -#include <utility> namespace kapi::filesystem { @@ -90,13 +88,11 @@ namespace kapi::filesystem return kernel::vfs::vfs::get().create_device_node(path, static_cast<std::uint32_t>(type), number); } - auto read_directory(std::size_t file_descriptor, directory_cursor position, std::span<directory_entry> buffer) - -> kstd::result<std::pair<std::size_t, directory_cursor>> + auto read_directory(std::size_t file_descriptor, std::span<directory_entry> buffer) -> kstd::result<std::size_t> { - static_cast<void>(file_descriptor); - static_cast<void>(position); - static_cast<void>(buffer); - return kstd::failure(make_error_code(kstd::errc::not_supported)); + return kernel::vfs::open_file_table::get().file(file_descriptor).and_then([=](auto file) { + return file->read_directory(buffer); + }); } } // namespace kapi::filesystem
\ No newline at end of file diff --git a/kernel/kapi/filesystem.tests.cpp b/kernel/kapi/filesystem.tests.cpp index b2e39967..6fa2de3d 100644 --- a/kernel/kapi/filesystem.tests.cpp +++ b/kernel/kapi/filesystem.tests.cpp @@ -11,6 +11,7 @@ #include <bit> #include <cstddef> #include <filesystem> +#include <ranges> #include <string_view> #include <vector> @@ -299,7 +300,12 @@ SCENARIO_METHOD(kernel::tests::vfs::storage_boot_module_vfs_fixture, "Kapi files REQUIRE(directory); auto buffer = std::vector<kapi::filesystem::directory_entry>{10}; - REQUIRE_FALSE(kapi::filesystem::read_directory(*directory, {}, buffer)); + REQUIRE(kapi::filesystem::read_directory(*directory, buffer) == 4); + + REQUIRE(std::ranges::find(buffer, "info_1.txt", &kapi::filesystem::directory_entry::name) != + std::ranges::end(buffer)); + REQUIRE(std::ranges::find(buffer, "info_2.txt", &kapi::filesystem::directory_entry::name) != + std::ranges::end(buffer)); } } } |
