diff options
Diffstat (limited to 'kernel/kernel/filesystem/ext2/inode.cpp')
| -rw-r--r-- | kernel/kernel/filesystem/ext2/inode.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/kernel/kernel/filesystem/ext2/inode.cpp b/kernel/kernel/filesystem/ext2/inode.cpp index 23344a7b..6dadbec5 100644 --- a/kernel/kernel/filesystem/ext2/inode.cpp +++ b/kernel/kernel/filesystem/ext2/inode.cpp @@ -6,6 +6,7 @@ #include <kapi/system.hpp> #include <kstd/cstring.hpp> +#include <kstd/result.hpp> #include <algorithm> #include <cstddef> @@ -23,7 +24,7 @@ namespace kernel::filesystem::ext2 } } - auto inode::read(void * buffer, size_t offset, size_t size) const -> size_t + auto inode::read(void * buffer, size_t offset, size_t size) const -> kstd::result<size_t> { auto const max_readable = this->size() - offset; auto const requested_size = std::min(size, max_readable); @@ -58,9 +59,14 @@ namespace kernel::filesystem::ext2 { auto const block_start_offset = block_number.value() * m_filesystem->block_size(); auto const read_offset = block_start_offset + in_block_offset; - - bytes_read += m_filesystem->backing_inode()->read(static_cast<uint8_t *>(buffer) + bytes_read, read_offset, - bytes_to_read); + auto const read_result = m_filesystem->backing_inode()->read(static_cast<uint8_t *>(buffer) + bytes_read, + read_offset, bytes_to_read); + if (!read_result) + { + return kstd::failure(read_result.error()); + } + + bytes_read += read_result.value(); } block_index++; @@ -70,7 +76,7 @@ namespace kernel::filesystem::ext2 return bytes_read; } - auto inode::write(void const *, size_t, size_t) -> size_t + auto inode::write(void const *, size_t, size_t) -> kstd::result<size_t> { kapi::system::panic("[EXT2] inode::write is not implemented yet"); return 0; |
