Util: Enable dropping part of a circle buffer with a null read

This commit is contained in:
Vicki Pfau 2024-04-16 02:54:48 -07:00
parent 76169c669a
commit 96a2ef5f42
1 changed files with 7 additions and 3 deletions

View File

@ -250,15 +250,19 @@ size_t mCircleBufferRead(struct mCircleBuffer* buffer, void* output, size_t leng
} }
size_t remaining = buffer->capacity - ((int8_t*) data - (int8_t*) buffer->data); size_t remaining = buffer->capacity - ((int8_t*) data - (int8_t*) buffer->data);
if (length <= remaining) { if (length <= remaining) {
memcpy(output, data, length); if (output) {
memcpy(output, data, length);
}
if (length == remaining) { if (length == remaining) {
buffer->readPtr = buffer->data; buffer->readPtr = buffer->data;
} else { } else {
buffer->readPtr = (int8_t*) data + length; buffer->readPtr = (int8_t*) data + length;
} }
} else { } else {
memcpy(output, data, remaining); if (output) {
memcpy((int8_t*) output + remaining, buffer->data, length - remaining); memcpy(output, data, remaining);
memcpy((int8_t*) output + remaining, buffer->data, length - remaining);
}
buffer->readPtr = (int8_t*) buffer->data + length - remaining; buffer->readPtr = (int8_t*) buffer->data + length - remaining;
} }