1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 15:37:47 +00:00

Streams: Consistent behaviour when reading from stream with error.

The streaming operator doesn't short-circuit, consider the following
snippet:

    void foo(InputStream& stream) {
        int a, b;
        stream >> a >> b;
    }

If the first read fails, the second is called regardless. It should be
well defined what happens in this case: nothing.
This commit is contained in:
asynts 2020-09-05 16:39:56 +02:00 committed by Andreas Kling
parent 5d85be7ed4
commit 6de63782c7
8 changed files with 24 additions and 3 deletions

View file

@ -44,6 +44,9 @@ public:
size_t read(Bytes bytes) override
{
if (has_any_error())
return 0;
const auto count = min(bytes.size(), remaining());
__builtin_memcpy(bytes.data(), m_bytes.data() + m_offset, count);
m_offset += count;
@ -239,6 +242,9 @@ public:
size_t read(Bytes bytes) override
{
if (has_any_error())
return 0;
const auto nread = read_without_consuming(bytes);
m_read_offset += nread;