diff options
Diffstat (limited to 'kernel/kernel/filesystem/ext2/inode.cpp')
| -rw-r--r-- | kernel/kernel/filesystem/ext2/inode.cpp | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/kernel/kernel/filesystem/ext2/inode.cpp b/kernel/kernel/filesystem/ext2/inode.cpp index 8af168b9..f42e2c0c 100644 --- a/kernel/kernel/filesystem/ext2/inode.cpp +++ b/kernel/kernel/filesystem/ext2/inode.cpp @@ -7,11 +7,14 @@ #include <kstd/cstring.hpp> #include <kstd/result.hpp> +#include <kstd/units.hpp> #include <algorithm> #include <cstddef> #include <cstdint> +using namespace kstd::units_literals; + namespace kernel::filesystem::ext2 { inode::inode(filesystem * fs, uint32_t inode_number, inode_data const & data) @@ -25,22 +28,23 @@ namespace kernel::filesystem::ext2 } } - auto inode::read(void * buffer, size_t offset, size_t size) const -> kstd::result<size_t> + auto inode::read(void * buffer, kstd::units::bytes offset, kstd::units::bytes size) const + -> kstd::result<kstd::units::bytes> { auto const max_readable = this->size() - offset; auto const requested_size = std::min(size, max_readable); - if (is_symbolic_link() && this->size() <= sizeof(m_data.block)) + if (is_symbolic_link() && this->size() <= kstd::units::bytes{sizeof(m_data.block)}) { auto inline_target = reinterpret_cast<uint8_t const *>(m_data.block.data()); - kstd::libc::memcpy(static_cast<uint8_t *>(buffer), inline_target + offset, requested_size); + kstd::libc::memcpy(static_cast<uint8_t *>(buffer), inline_target + offset, requested_size.value); return requested_size; } auto block_index = offset / m_filesystem->block_size(); auto in_block_offset = offset % m_filesystem->block_size(); - auto bytes_read = 0uz; + auto bytes_read = 0_B; while (bytes_read < requested_size) { @@ -53,7 +57,7 @@ namespace kernel::filesystem::ext2 auto const bytes_to_read = std::min(requested_size - bytes_read, m_filesystem->block_size() - in_block_offset); if (block_number == 0) { - kstd::libc::memset(static_cast<uint8_t *>(buffer) + bytes_read, 0, bytes_to_read); + kstd::libc::memset(static_cast<uint8_t *>(buffer) + bytes_read, 0, bytes_to_read.value); bytes_read += bytes_to_read; } else @@ -71,13 +75,14 @@ namespace kernel::filesystem::ext2 } block_index++; - in_block_offset = 0; // After the first block, we always start at the beginning of the block + in_block_offset = 0_B; // After the first block, we always start at the beginning of the block } return bytes_read; } - auto inode::write(void const * buffer, size_t offset, size_t size) -> kstd::result<size_t> + auto inode::write(void const * buffer, kstd::units::bytes offset, kstd::units::bytes size) + -> kstd::result<kstd::units::bytes> { if (!is_regular()) { @@ -95,7 +100,7 @@ namespace kernel::filesystem::ext2 if (new_inode_size > max_new_inode_size_without_new_blocks) { auto const additional_blocks_needed = - (new_inode_size - max_new_inode_size_without_new_blocks + m_filesystem->block_size() - 1) / + (new_inode_size - max_new_inode_size_without_new_blocks + m_filesystem->block_size() - 1_B) / m_filesystem->block_size(); if (!append_blocks(additional_blocks_needed)) @@ -108,7 +113,7 @@ namespace kernel::filesystem::ext2 auto block_index = offset / m_filesystem->block_size(); auto in_block_offset = offset % m_filesystem->block_size(); - auto bytes_written = 0uz; + auto bytes_written = 0_B; while (bytes_written < size) { @@ -134,7 +139,7 @@ namespace kernel::filesystem::ext2 bytes_written += write_result.value(); block_index++; - in_block_offset = 0; + in_block_offset = 0_B; } set_size(std::max(this->size(), offset + bytes_written)); @@ -196,7 +201,7 @@ namespace kernel::filesystem::ext2 return (m_data.mode & constants::mode_mask) == constants::mode_symbolic_link; } - auto inode::size() const -> uint64_t + auto inode::size() const -> kstd::units::bytes { uint64_t size = m_data.size; @@ -205,16 +210,16 @@ namespace kernel::filesystem::ext2 size |= static_cast<uint64_t>(m_data.dir_acl) << 32; } - return size; + return kstd::units::bytes{size}; } - auto inode::set_size(uint64_t new_size) -> void + auto inode::set_size(kstd::units::bytes new_size) -> void { if (m_filesystem->revision_level() > constants::good_old_revision && is_regular()) { - m_data.dir_acl = static_cast<uint32_t>(new_size >> 32); + m_data.dir_acl = static_cast<uint32_t>(new_size.value >> 32); } - m_data.size = static_cast<uint32_t>(new_size); + m_data.size = static_cast<uint32_t>(new_size.value); } [[nodiscard]] auto inode::number() const -> uint32_t |
