diff options
| author | Lukas Oesch <lukas.oesch@ost.ch> | 2026-03-30 19:39:34 +0200 |
|---|---|---|
| committer | Lukas Oesch <lukas.oesch@ost.ch> | 2026-03-30 19:39:34 +0200 |
| commit | 9058bbed061602cdf41013d5e5d91ce892f63c94 (patch) | |
| tree | b2db129522c6d3e7d939926d5ab91bc3ca207f42 /kernel/src/filesystem/device_inode.cpp | |
| parent | c946cf6a89bbeae7fb96a67b55d91b7ae0cfa48d (diff) | |
| parent | 7ad07a735759dc93b668ec92896f57c0c0df0025 (diff) | |
| download | teachos-9058bbed061602cdf41013d5e5d91ce892f63c94.tar.xz teachos-9058bbed061602cdf41013d5e5d91ce892f63c94.zip | |
Merge branch 'ext2' into 'develop-BA-FS26'
Ext2-initial-structure
See merge request teachos/kernel!17
Diffstat (limited to 'kernel/src/filesystem/device_inode.cpp')
| -rw-r--r-- | kernel/src/filesystem/device_inode.cpp | 76 |
1 files changed, 3 insertions, 73 deletions
diff --git a/kernel/src/filesystem/device_inode.cpp b/kernel/src/filesystem/device_inode.cpp index 64cd6e9..da062fc 100644 --- a/kernel/src/filesystem/device_inode.cpp +++ b/kernel/src/filesystem/device_inode.cpp @@ -2,7 +2,7 @@ #include "kapi/system.hpp" -#include "kernel/devices/block_device.hpp" +#include "kernel/devices/block_device_utils.hpp" #include "kernel/devices/device.hpp" #include "kernel/filesystem/inode.hpp" @@ -10,7 +10,6 @@ #include <kstd/memory> #include <kstd/vector> -#include <algorithm> #include <cstddef> namespace filesystem @@ -29,20 +28,7 @@ namespace filesystem { if (m_device->is_block_device()) { - return process_blocks(offset, size, buffer, - [](size_t idx, size_t off, size_t len, size_t done, devices::block_device * device, - std::byte * scratch, void * buffer) { - auto * out = static_cast<std::byte *>(buffer); - if (off == 0 && len == device->block_size()) - { - device->read_block(idx, out + done); - } - else - { - device->read_block(idx, scratch); - kstd::libc::memcpy(out + done, scratch + off, len); - } - }); + return devices::block_device_utils::read(m_device, buffer, offset, size); } else { @@ -54,21 +40,7 @@ namespace filesystem { if (m_device->is_block_device()) { - return process_blocks(offset, size, const_cast<void *>(buffer), - [](size_t idx, size_t off, size_t len, size_t done, devices::block_device * device, - std::byte * scratch, void * buffer) { - auto const * in = static_cast<std::byte const *>(buffer); - if (off == 0 && len == device->block_size()) - { - device->write_block(idx, in + done); - } - else - { - device->read_block(idx, scratch); - kstd::libc::memcpy(scratch + off, in + done, len); - device->write_block(idx, scratch); - } - }); + return devices::block_device_utils::write(m_device, buffer, offset, size); } else { @@ -81,46 +53,4 @@ namespace filesystem return m_device; } - auto device_inode::process_blocks(size_t offset, size_t size, void * buffer, block_op op) const -> size_t - { - if (buffer == nullptr) - { - kapi::system::panic("[FILESYSTEM] device_file::process_blocks called with null buffer."); - } - - if (size == 0) - { - return 0; - } - - auto * block_dev = static_cast<devices::block_device *>(m_device.get()); - if (block_dev == nullptr) - { - kapi::system::panic("[FILESYSTEM] device_file: expected block_device."); - } - - size_t const block_size = block_dev->block_size(); - size_t const capacity = block_dev->capacity(); - - if (offset >= capacity) - return 0; - size_t const total_to_process = std::min(size, capacity - offset); - - kstd::vector<std::byte> scratch_buffer{block_size}; - auto processed = 0uz; - - while (processed < total_to_process) - { - size_t const absolute_offset = offset + processed; - size_t const block_index = absolute_offset / block_size; - size_t const in_block_offset = absolute_offset % block_size; - size_t const chunk_size = std::min(total_to_process - processed, block_size - in_block_offset); - - op(block_index, in_block_offset, chunk_size, processed, block_dev, scratch_buffer.data(), buffer); - - processed += chunk_size; - } - - return processed; - } } // namespace filesystem
\ No newline at end of file |
