diff options
Diffstat (limited to 'kernel/filesystem/src/device_file.cpp')
| -rw-r--r-- | kernel/filesystem/src/device_file.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/kernel/filesystem/src/device_file.cpp b/kernel/filesystem/src/device_file.cpp index f11638e..882c9b1 100644 --- a/kernel/filesystem/src/device_file.cpp +++ b/kernel/filesystem/src/device_file.cpp @@ -6,14 +6,15 @@ #include "devices/device.hpp" #include <kstd/cstring> +#include <kstd/memory> +#include <kstd/vector> #include <algorithm> -#include <array> #include <cstddef> namespace filesystem { - device_file::device_file(devices::device * device) + device_file::device_file(kstd::shared_ptr<devices::device> device) : m_device(device) { if (!m_device) @@ -90,7 +91,13 @@ namespace filesystem return 0; } - auto * block_dev = static_cast<devices::block_device *>(m_device); + // @Felix rtti not activated why? e.g. dynamic_cast does not work, whats with std::dynamic_pointer_cast + // online: rtti overhead, bad design, ... ? + 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(); @@ -99,8 +106,7 @@ namespace filesystem return 0; size_t const total_to_process = std::min(size, capacity - offset); - // TODO BA-FS26 use kstd::vector when available - std::array<std::byte, 512> scratch_buffer{}; // TODO BA-FS26 better solution than fixed scratch_buffer ?? + kstd::vector<std::byte> scratch_buffer{block_size}; auto processed = 0uz; while (processed < total_to_process) |
