aboutsummaryrefslogtreecommitdiff
path: root/kernel/kapi
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-08-27 12:33:31 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-08-27 12:33:41 +0200
commit0e72a1b27df2008013f2ee9c468a88c3e3843fae (patch)
treef06177db1d52fb5ea1afa84c78e4b1094f5c55f0 /kernel/kapi
parentc9711c4ea8e5fccc23255e9f6ae86b15006aa6ea (diff)
downloadkernel-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.cpp12
-rw-r--r--kernel/kapi/filesystem.tests.cpp8
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));
}
}
}