From fc7e8b57fc79baf0a93b5ab4c14efe839e6f8f43 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Mon, 17 Aug 2026 21:01:55 +0200 Subject: kernel/ram_disk: predicate read size on buffer --- kernel/kernel/drivers/storage/ram_disk.cpp | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/kernel/kernel/drivers/storage/ram_disk.cpp b/kernel/kernel/drivers/storage/ram_disk.cpp index b1b0d2b3..778feeeb 100644 --- a/kernel/kernel/drivers/storage/ram_disk.cpp +++ b/kernel/kernel/drivers/storage/ram_disk.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -29,8 +30,6 @@ namespace kernel::drivers::storage namespace { - constexpr auto default_block_size = 512_B; - struct descriptor final : kapi::devices::driver_descriptor { public: @@ -57,27 +56,23 @@ namespace kernel::drivers::storage [[nodiscard]] auto read_block(std::size_t block_index, std::span buffer) -> kstd::result override { - auto info = devices::block_device_utils::calculate_transfer(*this, block_index); + auto const info = devices::block_device_utils::calculate_transfer(*this, block_index); + auto const transfer_size = std::min(info.to_transfer, kstd::units::bytes{buffer.size()}); - if (info.to_transfer > 0_B) + if (transfer_size > 0_B) { auto source = static_cast(m_module.start_address) + info.offset; - kstd::libc::memcpy(buffer.data(), source, info.to_transfer.value); + kstd::libc::memcpy(buffer.first(transfer_size.value).data(), source, transfer_size.value); } - if (info.remainder > 0_B) - { - kstd::libc::memset(buffer.data() + info.to_transfer, 0, info.remainder.value); - } - - return info.to_transfer; + return transfer_size; } auto write_block(std::size_t block_index, std::span buffer) -> kstd::result override { auto const info = devices::block_device_utils::calculate_transfer(*this, block_index); - auto transfer_size = std::min(info.to_transfer, kstd::units::bytes{buffer.size()}); + auto const transfer_size = std::min(info.to_transfer, kstd::units::bytes{buffer.size()}); if (transfer_size > 0_B) { @@ -90,7 +85,7 @@ namespace kernel::drivers::storage [[nodiscard]] auto block_size() const -> kstd::units::bytes override { - return default_block_size; + return kapi::memory::page_size; } [[nodiscard]] auto capacity() const -> kstd::units::bytes override -- cgit v1.2.3