aboutsummaryrefslogtreecommitdiff
path: root/kernel/devices/src/BlockDevice.cpp
diff options
context:
space:
mode:
authorLukas Oesch <lukasoesch20@gmail.com>2026-03-03 14:11:49 +0100
committerLukas Oesch <lukasoesch20@gmail.com>2026-03-17 16:42:42 +0100
commit2ae7a868b867289b9591d662972f559d412315c3 (patch)
tree3e9cb5401a40e942fe0cc435c01e476701f70287 /kernel/devices/src/BlockDevice.cpp
parentfe0aadec94834b72f4511ce5e300b9fb22e66e60 (diff)
downloadteachos-2ae7a868b867289b9591d662972f559d412315c3.tar.xz
teachos-2ae7a868b867289b9591d662972f559d412315c3.zip
refactoring read and write block calculations
Diffstat (limited to 'kernel/devices/src/BlockDevice.cpp')
-rw-r--r--kernel/devices/src/BlockDevice.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/kernel/devices/src/BlockDevice.cpp b/kernel/devices/src/BlockDevice.cpp
index 6d43073..edc0109 100644
--- a/kernel/devices/src/BlockDevice.cpp
+++ b/kernel/devices/src/BlockDevice.cpp
@@ -6,7 +6,19 @@
namespace devices
{
- block_device::block_device(size_t major, size_t minor)
+ block_device::block_device(size_t major, size_t minor, size_t block_size)
: device(major, minor)
+ , m_block_size(block_size)
{}
+
+ auto block_device::calculate_transfer(size_t block_index) const -> transfer_info
+ {
+ size_t const offset = block_index * m_block_size;
+ size_t const limit = size();
+
+ size_t const available = (offset < limit) ? (limit - offset) : 0;
+ size_t const to_transfer = (available < m_block_size) ? available : m_block_size;
+
+ return {offset, to_transfer, m_block_size - to_transfer};
+ }
} // namespace devices \ No newline at end of file