Ver Fonte

AK: Report copied bytes when seekback copying from CircularBuffer

Otherwise, we have no way of determining whether our copy was truncated
by accident.
Tim Schumacher há 2 anos atrás
pai
commit
767fb01a8c
2 ficheiros alterados com 6 adições e 5 exclusões
  1. 5 4
      AK/CircularBuffer.cpp
  2. 1 1
      AK/CircularBuffer.h

+ 5 - 4
AK/CircularBuffer.cpp

@@ -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;
 }
 
 }

+ 1 - 1
AK/CircularBuffer.h

@@ -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;