diff --git a/kernel/include/kernel/FS/RamFS/Inode.h b/kernel/include/kernel/FS/RamFS/Inode.h index 57c3299da3..0b78b85fa7 100644 --- a/kernel/include/kernel/FS/RamFS/Inode.h +++ b/kernel/include/kernel/FS/RamFS/Inode.h @@ -33,6 +33,8 @@ namespace Kernel virtual BAN::ErrorOr read(size_t, void*, size_t) override; virtual BAN::ErrorOr write(size_t, const void*, size_t) override; + virtual BAN::ErrorOr truncate(size_t) override; + void add_link() { m_inode_info.nlink++; } protected: diff --git a/kernel/kernel/FS/RamFS/Inode.cpp b/kernel/kernel/FS/RamFS/Inode.cpp index 1c38008e7b..9009871ea5 100644 --- a/kernel/kernel/FS/RamFS/Inode.cpp +++ b/kernel/kernel/FS/RamFS/Inode.cpp @@ -57,20 +57,19 @@ namespace Kernel BAN::ErrorOr RamInode::write(size_t offset, const void* buffer, size_t bytes) { if (offset + bytes > (size_t)size()) - { - TRY(m_data.resize(offset + bytes)); - if (offset > (size_t)size()) - memset(m_data.data() + offset, 0, offset - size()); - - m_inode_info.size = m_data.size(); - m_inode_info.blocks = BAN::Math::div_round_up(size(), blksize()); - } - + TRY(truncate(offset + bytes)); memcpy(m_data.data() + offset, buffer, bytes); - return bytes; } + BAN::ErrorOr RamInode::truncate(size_t new_size) + { + TRY(m_data.resize(new_size, 0)); + m_inode_info.size = m_data.size(); + m_inode_info.blocks = BAN::Math::div_round_up(size(), blksize()); + return {}; + } + /* RAM DIRECTORY INODE