aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-08-17 21:01:55 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-08-17 21:01:55 +0200
commitfc7e8b57fc79baf0a93b5ab4c14efe839e6f8f43 (patch)
tree2698ed155ca20d6bfc5e3f03e3d1a25febbb0802
parent4e42ee73190d628a26573d929bc11358418b2a2d (diff)
downloadkernel-fc7e8b57fc79baf0a93b5ab4c14efe839e6f8f43.tar.xz
kernel-fc7e8b57fc79baf0a93b5ab4c14efe839e6f8f43.zip
kernel/ram_disk: predicate read size on buffer
-rw-r--r--kernel/kernel/drivers/storage/ram_disk.cpp21
1 files 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 <kapi/boot_modules.hpp>
#include <kapi/devices.hpp>
#include <kapi/filesystem.hpp>
+#include <kapi/memory.hpp>
#include <kstd/cstring.hpp>
#include <kstd/format.hpp>
@@ -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<std::byte> buffer)
-> kstd::result<kstd::units::bytes> 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<std::byte const *>(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<std::byte const> buffer)
-> kstd::result<kstd::units::bytes> 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