AK: Report copied bytes when seekback copying from CircularBuffer

Otherwise, we have no way of determining whether our copy was truncated
by accident.
This commit is contained in:
Tim Schumacher 2023-04-04 18:29:43 +02:00 committed by Tim Flynn
parent 997e745e87
commit 767fb01a8c
Notes: sideshowbarker 2024-07-18 00:41:35 +09:00
2 changed files with 6 additions and 5 deletions

View file

@ -206,20 +206,21 @@ ErrorOr<size_t> CircularBuffer::fill_from_stream(Stream& stream)
return bytes.size();
}
ErrorOr<void> CircularBuffer::copy_from_seekback(size_t distance, size_t length)
ErrorOr<size_t> CircularBuffer::copy_from_seekback(size_t distance, size_t length)
{
if (distance > m_seekback_limit)
return Error::from_string_literal("Tried a seekback copy beyond the seekback limit");
while (length > 0) {
auto remaining_length = length;
while (remaining_length > 0) {
auto next_span = next_read_span_with_seekback(distance);
if (next_span.size() == 0)
break;
length -= write(next_span.trim(length));
remaining_length -= write(next_span.trim(remaining_length));
}
return {};
return length - remaining_length;
}
}

View file

@ -33,7 +33,7 @@ public:
/// before the current write pointer and allows for reading already-read data.
ErrorOr<Bytes> read_with_seekback(Bytes bytes, size_t distance);
ErrorOr<void> copy_from_seekback(size_t distance, size_t length);
ErrorOr<size_t> copy_from_seekback(size_t distance, size_t length);
[[nodiscard]] size_t empty_space() const;
[[nodiscard]] size_t used_space() const;