aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem/device_file.cpp
diff options
context:
space:
mode:
authorLukas Oesch <lukasoesch20@gmail.com>2026-03-21 00:28:17 +0100
committerLukas Oesch <lukasoesch20@gmail.com>2026-03-26 21:17:33 +0100
commitba63fbfc2bb43a6f0f05b6b49fd51fd6c89a0861 (patch)
tree87f30fe5d929c170d4eecbdf2989773c821d537a /kernel/src/filesystem/device_file.cpp
parent90452b752688110db2edc8d5dccdf0d6e0face5f (diff)
downloadteachos-ba63fbfc2bb43a6f0f05b6b49fd51fd6c89a0861.tar.xz
teachos-ba63fbfc2bb43a6f0f05b6b49fd51fd6c89a0861.zip
refactor file and inode architecture again
Diffstat (limited to 'kernel/src/filesystem/device_file.cpp')
-rw-r--r--kernel/src/filesystem/device_file.cpp25
1 files changed, 17 insertions, 8 deletions
diff --git a/kernel/src/filesystem/device_file.cpp b/kernel/src/filesystem/device_file.cpp
index 48ed20d..26c7511 100644
--- a/kernel/src/filesystem/device_file.cpp
+++ b/kernel/src/filesystem/device_file.cpp
@@ -4,6 +4,9 @@
#include "kernel/devices/block_device.hpp"
#include "kernel/devices/device.hpp"
+#include "kernel/filesystem/device_inode.hpp"
+#include "kernel/filesystem/file.hpp"
+#include "kernel/filesystem/inode.hpp"
#include <kstd/cstring>
#include <kstd/memory>
@@ -14,18 +17,18 @@
namespace filesystem
{
- device_file::device_file(kstd::shared_ptr<devices::device> const & device)
- : m_device(device)
+ device_file::device_file(kstd::shared_ptr<inode> const & inode)
+ : file(inode)
{
- if (!m_device)
+ if (!m_inode->is_device())
{
- kapi::system::panic("[FILESYSTEM] device_file constructed with null device.");
+ kapi::system::panic("[FILESYSTEM] device_file constructed with non-device inode.");
}
}
auto device_file::read(void * buffer, size_t offset, size_t size) const -> size_t
{
- if (m_device->is_block_device())
+ if (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,
@@ -50,7 +53,7 @@ namespace filesystem
auto device_file::write(void const * buffer, size_t offset, size_t size) -> size_t
{
- if (m_device->is_block_device())
+ if (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,
@@ -78,7 +81,7 @@ namespace filesystem
{
if (buffer == nullptr)
{
- kapi::system::panic("[FILESYSTEM] device_file::write called with null buffer.");
+ kapi::system::panic("[FILESYSTEM] device_file::process_blocks called with null buffer.");
}
if (size == 0)
@@ -86,7 +89,7 @@ namespace filesystem
return 0;
}
- auto * block_dev = static_cast<devices::block_device *>(m_device.get());
+ auto * block_dev = static_cast<devices::block_device *>(device().get());
if (block_dev == nullptr)
{
kapi::system::panic("[FILESYSTEM] device_file: expected block_device.");
@@ -116,4 +119,10 @@ namespace filesystem
return processed;
}
+
+ auto device_file::device() const -> kstd::shared_ptr<devices::device> const &
+ {
+ auto inode = static_cast<device_inode *>(m_inode.get());
+ return inode->device();
+ }
} // namespace filesystem