summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/tools')
-rw-r--r--src/corelib/tools/qringbuffer.cpp62
-rw-r--r--src/corelib/tools/qringbuffer_p.h5
2 files changed, 36 insertions, 31 deletions
diff --git a/src/corelib/tools/qringbuffer.cpp b/src/corelib/tools/qringbuffer.cpp
index d1a4ce79cb..eb7bdfe95c 100644
--- a/src/corelib/tools/qringbuffer.cpp
+++ b/src/corelib/tools/qringbuffer.cpp
@@ -93,15 +93,15 @@ QByteArray QRingChunk::toByteArray()
*/
const char *QRingBuffer::readPointerAtPosition(qint64 pos, qint64 &length) const
{
- if (pos >= 0) {
- for (const QRingChunk &chunk : buffers) {
- length = chunk.size();
- if (length > pos) {
- length -= pos;
- return chunk.data() + pos;
- }
- pos -= length;
+ Q_ASSERT(pos >= 0);
+
+ for (const QRingChunk &chunk : buffers) {
+ length = chunk.size();
+ if (length > pos) {
+ length -= pos;
+ return chunk.data() + pos;
}
+ pos -= length;
}
length = 0;
@@ -143,8 +143,7 @@ void QRingBuffer::free(qint64 bytes)
char *QRingBuffer::reserve(qint64 bytes)
{
- if (bytes <= 0 || bytes >= MaxByteArraySize)
- return 0;
+ Q_ASSERT(bytes > 0 && bytes < MaxByteArraySize);
const int chunkSize = qMax(basicBlockSize, int(bytes));
int tail = 0;
@@ -174,8 +173,7 @@ char *QRingBuffer::reserve(qint64 bytes)
*/
char *QRingBuffer::reserveFront(qint64 bytes)
{
- if (bytes <= 0 || bytes >= MaxByteArraySize)
- return 0;
+ Q_ASSERT(bytes > 0 && bytes < MaxByteArraySize);
const int chunkSize = qMax(basicBlockSize, int(bytes));
if (bufferSize == 0) {
@@ -246,7 +244,9 @@ void QRingBuffer::clear()
qint64 QRingBuffer::indexOf(char c, qint64 maxLength, qint64 pos) const
{
- if (maxLength <= 0 || pos < 0)
+ Q_ASSERT(maxLength >= 0 && pos >= 0);
+
+ if (maxLength == 0)
return -1;
qint64 index = -pos;
@@ -309,20 +309,19 @@ QByteArray QRingBuffer::read()
*/
qint64 QRingBuffer::peek(char *data, qint64 maxLength, qint64 pos) const
{
- qint64 readSoFar = 0;
-
- if (pos >= 0) {
- for (int i = 0; readSoFar < maxLength && i < buffers.size(); ++i) {
- qint64 blockLength = buffers[i].size();
+ Q_ASSERT(maxLength >= 0 && pos >= 0);
- if (pos < blockLength) {
- blockLength = qMin(blockLength - pos, maxLength - readSoFar);
- memcpy(data + readSoFar, buffers[i].data() + pos, blockLength);
- readSoFar += blockLength;
- pos = 0;
- } else {
- pos -= blockLength;
- }
+ qint64 readSoFar = 0;
+ for (int i = 0; readSoFar < maxLength && i < buffers.size(); ++i) {
+ qint64 blockLength = buffers[i].size();
+
+ if (pos < blockLength) {
+ blockLength = qMin(blockLength - pos, maxLength - readSoFar);
+ memcpy(data + readSoFar, buffers[i].data() + pos, blockLength);
+ readSoFar += blockLength;
+ pos = 0;
+ } else {
+ pos -= blockLength;
}
}
@@ -336,10 +335,15 @@ qint64 QRingBuffer::peek(char *data, qint64 maxLength, qint64 pos) const
*/
void QRingBuffer::append(const char *data, qint64 size)
{
+ Q_ASSERT(size >= 0);
+
+ if (size == 0)
+ return;
+
char *writePointer = reserve(size);
if (size == 1)
*writePointer = *data;
- else if (size)
+ else
::memcpy(writePointer, data, size);
}
@@ -359,9 +363,9 @@ void QRingBuffer::append(const QByteArray &qba)
qint64 QRingBuffer::readLine(char *data, qint64 maxLength)
{
- if (!data || --maxLength <= 0)
- return -1;
+ Q_ASSERT(data != nullptr && maxLength > 1);
+ --maxLength;
qint64 i = indexOf('\n', maxLength);
i = read(data, i >= 0 ? (i + 1) : maxLength);
diff --git a/src/corelib/tools/qringbuffer_p.h b/src/corelib/tools/qringbuffer_p.h
index c232ae3c72..76ab4a5b62 100644
--- a/src/corelib/tools/qringbuffer_p.h
+++ b/src/corelib/tools/qringbuffer_p.h
@@ -207,8 +207,9 @@ public:
Q_CORE_EXPORT char *reserveFront(qint64 bytes);
inline void truncate(qint64 pos) {
- if (pos < size())
- chop(size() - pos);
+ Q_ASSERT(pos >= 0 && pos <= size());
+
+ chop(size() - pos);
}
Q_CORE_EXPORT void chop(qint64 bytes);