diff --git a/Core/HW/BufferQueue.h b/Core/HW/BufferQueue.h index 26265280f9..0ceb0985e3 100644 --- a/Core/HW/BufferQueue.h +++ b/Core/HW/BufferQueue.h @@ -86,13 +86,20 @@ struct BufferQueue { if (buf) { if (start + bytesgot <= bufQueueSize) { memcpy(buf, bufQueue + start, bytesgot); + start += bytesgot; } else { int firstSize = bufQueueSize - start; memcpy(buf, bufQueue + start, firstSize); memcpy(buf + firstSize, bufQueue, bytesgot - firstSize); + start = bytesgot - firstSize; } + } else { + int firstSize = bufQueueSize - start; + if (start + bytesgot <= bufQueueSize) + start += bytesgot; + else + start = bytesgot - firstSize; } - start = (start + bytesgot) % bufQueueSize; return bytesgot; }