diff --git a/src/butil/iobuf.cpp b/src/butil/iobuf.cpp index 26046e3745..ce60932327 100644 --- a/src/butil/iobuf.cpp +++ b/src/butil/iobuf.cpp @@ -1849,10 +1849,14 @@ void IOBufAsZeroCopyInputStream::BackUp(int count) { } } -// Skips a number of bytes. Returns false if the end of the stream is -// reached or some input error occurred. In the end-of-stream case, the -// stream is advanced to the end of the stream (so ByteCount() will return -// the total size of the stream). +// Skips `count` number of bytes. +// Returns true on success, or false if some input error occurred, or `count` +// exceeds the end of the stream. This function may skip up to `count - 1` +// bytes in case of failure. +// +// Preconditions: +// * `count` is non-negative. +// bool IOBufAsZeroCopyInputStream::Skip(int count) { const IOBuf::BlockRef* cur_ref = _buf->_pref_at(_ref_index); while (cur_ref) { @@ -1867,7 +1871,7 @@ bool IOBufAsZeroCopyInputStream::Skip(int count) { _byte_count += left_bytes; cur_ref = _buf->_pref_at(++_ref_index); } - return false; + return (0 == count); } int64_t IOBufAsZeroCopyInputStream::ByteCount() const { @@ -2102,4 +2106,4 @@ bool IOBufBytesIterator::forward_one_block(const void** data, size_t* size) { void* fast_memcpy(void *__restrict dest, const void *__restrict src, size_t n) { return butil::iobuf::cp(dest, src, n); -} // namespace butil \ No newline at end of file +} // namespace butil