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