diff --git a/Kernel/FileSystem/Inode.cpp b/Kernel/FileSystem/Inode.cpp index afe3959725..ec60311822 100644 --- a/Kernel/FileSystem/Inode.cpp +++ b/Kernel/FileSystem/Inode.cpp @@ -118,6 +118,21 @@ ErrorOr Inode::read_bytes(off_t offset, size_t length, UserOrKernelBuffe return read_bytes_locked(offset, length, buffer, open_description); } +ErrorOr Inode::read_until_filled_or_end(off_t offset, size_t length, UserOrKernelBuffer buffer, OpenFileDescription* open_description) const +{ + auto remaining_length = length; + + while (remaining_length > 0) { + auto filled_bytes = TRY(read_bytes(offset, remaining_length, buffer, open_description)); + if (filled_bytes == 0) + break; + offset += filled_bytes; + remaining_length -= filled_bytes; + } + + return length - remaining_length; +} + ErrorOr Inode::update_timestamps([[maybe_unused]] Optional