aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem/ext2/inode.cpp
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-07-03 09:32:30 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-07-03 09:32:30 +0200
commit3012fa5dfe5dfed5e83baf9b40934ed8e8317627 (patch)
tree00d1c60a3d5d1cdfa55e0ff1691cd3362b6064ee /kernel/src/filesystem/ext2/inode.cpp
parent5d8a58d538515ffc57ddf82ba40ba763990a8696 (diff)
downloadkernel-3012fa5dfe5dfed5e83baf9b40934ed8e8317627.tar.xz
kernel-3012fa5dfe5dfed5e83baf9b40934ed8e8317627.zip
kernel: rearrange sources according to p1204
Diffstat (limited to 'kernel/src/filesystem/ext2/inode.cpp')
-rw-r--r--kernel/src/filesystem/ext2/inode.cpp111
1 files changed, 0 insertions, 111 deletions
diff --git a/kernel/src/filesystem/ext2/inode.cpp b/kernel/src/filesystem/ext2/inode.cpp
deleted file mode 100644
index 35a32ee4..00000000
--- a/kernel/src/filesystem/ext2/inode.cpp
+++ /dev/null
@@ -1,111 +0,0 @@
-#include <kernel/filesystem/ext2/inode.hpp>
-
-#include <kernel/filesystem/ext2/filesystem.hpp>
-#include <kernel/filesystem/inode.hpp>
-
-#include <kapi/system.hpp>
-
-#include <kstd/cstring>
-
-#include <algorithm>
-#include <cstddef>
-#include <cstdint>
-
-namespace kernel::filesystem::ext2
-{
- inode::inode(filesystem const * fs, inode_data const & data)
- : m_filesystem(fs)
- , m_data(data)
- {
- if (!m_filesystem)
- {
- kapi::system::panic("[EXT2] ext2::inode constructed with filesystem null pointer");
- }
- }
-
- auto inode::read(void * buffer, size_t offset, size_t size) const -> size_t
- {
- 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))
- {
- 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);
- return requested_size;
- }
-
- auto block_index = offset / m_filesystem->block_size();
- auto in_block_offset = offset % m_filesystem->block_size();
-
- auto bytes_read = 0uz;
-
- while (bytes_read < requested_size)
- {
- auto const block_number = m_filesystem->map_inode_block_index_to_global_block_number(block_index, m_data);
- if (block_number == -1)
- {
- break;
- }
-
- 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);
- bytes_read += bytes_to_read;
- }
- else
- {
- auto const block_start_offset = block_number * 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);
- }
-
- block_index++;
- in_block_offset = 0; // After the first block, we always start at the beginning of the block
- }
-
- return bytes_read;
- }
-
- auto inode::write(void const *, size_t, size_t) -> size_t
- {
- kapi::system::panic("[EXT2] inode::write is not implemented yet");
- return 0;
- }
-
- [[nodiscard]] auto inode::data() const -> inode_data const &
- {
- return m_data;
- }
-
- auto inode::is_regular() const -> bool
- {
- return (m_data.mode & constants::mode_mask) == constants::mode_regular;
- }
-
- auto inode::is_directory() const -> bool
- {
- return (m_data.mode & constants::mode_mask) == constants::mode_directory;
- }
-
- auto inode::is_symbolic_link() const -> bool
- {
- return (m_data.mode & constants::mode_mask) == constants::mode_symbolic_link;
- }
-
- auto inode::size() const -> uint64_t
- {
- uint64_t size = m_data.size;
-
- if (m_filesystem->revision_level() > constants::good_old_revision && is_regular())
- {
- size |= static_cast<uint64_t>(m_data.dir_acl) << 32;
- }
-
- return size;
- }
-
-} // namespace kernel::filesystem::ext2