diff --git a/app/src/main/cpp/skyline/common/circular_buffer.h b/app/src/main/cpp/skyline/common/circular_buffer.h index 0ddfcc8a..0044e6f2 100644 --- a/app/src/main/cpp/skyline/common/circular_buffer.h +++ b/app/src/main/cpp/skyline/common/circular_buffer.h @@ -48,7 +48,7 @@ namespace skyline { size = sizeBegin + sizeEnd; } - if (copyFunction && copyOffset) { + if (copyFunction && (copyOffset != 0 && copyOffset < sizeEnd)) { auto sourceEnd{start + ((copyOffset != -1) ? copyOffset : sizeEnd)}; for (auto source{start}, destination{pointer}; source < sourceEnd; source++, destination++) @@ -59,6 +59,8 @@ namespace skyline { copyOffset -= sizeEnd; } } else { + if (copyOffset) + copyOffset -= static_cast(sizeEnd) * sizeof(Type); std::memcpy(pointer, start, static_cast(sizeEnd) * sizeof(Type)); }