aboutsummaryrefslogtreecommitdiff
path: root/kernel/filesystem/src/device_file.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/filesystem/src/device_file.cpp')
-rw-r--r--kernel/filesystem/src/device_file.cpp16
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)