The allocated size is now always an integral multiple of alignment.

This commit is contained in:
Maschell 2022-02-12 20:11:54 +01:00
parent f513e1a374
commit 79787e7dce
1 changed files with 1 additions and 7 deletions

View File

@ -395,9 +395,6 @@ void MemoryMapping_setupMemoryMapping() {
OSInitMutex(&allocMutex);
}
#define ROUNDDOWN(val, align) ((val) & ~(align - 1))
#define ROUNDUP(val, align) ROUNDDOWN(((val) + (align - 1)), align)
void *MemoryMapping_allocEx(uint32_t size, int32_t align, bool videoOnly) {
OSLockMutex(&allocMutex);
void *res = nullptr;
@ -414,10 +411,7 @@ void *MemoryMapping_allocEx(uint32_t size, int32_t align, bool videoOnly) {
continue;
}
// We round up the size to avoid heap corruption.
// FSReadFile expects the buffer size to be a multiple of 0x40
// This can remove once all modules/plugins have been updated :)
res = MEMAllocFromExpHeapEx(heapHandle, ROUNDUP(size, 0x40), align);
res = MEMAllocFromExpHeapEx(heapHandle, (size + align - 1) & ~(align - 1), align);
if (res != nullptr) {
break;
}