LibCore: Make not discarding all requested bytes from a stream an error

This commit is contained in:
Tim Schumacher 2022-12-11 19:47:49 +01:00 committed by Andreas Kling
parent 9a3e95785e
commit 3fccf2481c
Notes: sideshowbarker 2024-07-17 06:00:02 +09:00
2 changed files with 6 additions and 1 deletions

View file

@ -82,6 +82,9 @@ ErrorOr<void> Stream::discard(size_t discarded_bytes)
Array<u8, continuous_read_size> buffer;
while (discarded_bytes > 0) {
if (is_eof())
return Error::from_string_literal("Reached end-of-file before reading all discarded bytes");
auto slice = TRY(read(buffer.span().slice(0, min(discarded_bytes, continuous_read_size))));
discarded_bytes -= slice.size();
}

View file

@ -40,7 +40,9 @@ public:
/// is returned once EOF is encountered. The block size determines the size
/// of newly allocated chunks while reading.
virtual ErrorOr<ByteBuffer> read_until_eof(size_t block_size = 4096);
/// Discards the given number of bytes from the stream.
/// Discards the given number of bytes from the stream. As this is usually used
/// as an efficient version of `read_entire_buffer`, it returns an error
/// if reading failed or if not all bytes could be discarded.
/// Unless specifically overwritten, this just uses read() to read into an
/// internal stack-based buffer.
virtual ErrorOr<void> discard(size_t discarded_bytes);