diff --git a/AK/MemoryStream.cpp b/AK/MemoryStream.cpp index 19448bfbbe..1f92e9146d 100644 --- a/AK/MemoryStream.cpp +++ b/AK/MemoryStream.cpp @@ -54,6 +54,17 @@ ErrorOr FixedMemoryStream::read_some(Bytes bytes) return bytes.trim(to_read); } +ErrorOr FixedMemoryStream::read_until_filled(AK::Bytes bytes) +{ + if (remaining() < bytes.size()) + return Error::from_string_view_or_print_error_and_return_errno("Can't read past the end of the stream memory"sv, EINVAL); + + m_bytes.slice(m_offset).copy_trimmed_to(bytes); + m_offset += bytes.size(); + + return {}; +} + ErrorOr FixedMemoryStream::seek(i64 offset, SeekMode seek_mode) { switch (seek_mode) { diff --git a/AK/MemoryStream.h b/AK/MemoryStream.h index f069b222a3..7a9ce7d8ec 100644 --- a/AK/MemoryStream.h +++ b/AK/MemoryStream.h @@ -24,6 +24,7 @@ public: virtual void close() override; virtual ErrorOr truncate(size_t) override; virtual ErrorOr read_some(Bytes bytes) override; + virtual ErrorOr read_until_filled(Bytes bytes) override; virtual ErrorOr seek(i64 offset, SeekMode seek_mode = SeekMode::SetPosition) override;