mirror of https://github.com/mgba-emu/mgba.git
Vita: Wait, what do you mean sceKernelFindMemBlockByAddr has been in vitasdk for 4.5 years?
This commit is contained in:
parent
8a3a2bf058
commit
0a52f44fa8
|
@ -4,22 +4,11 @@
|
|||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
#include <mgba-util/memory.h>
|
||||
#include <mgba-util/vector.h>
|
||||
|
||||
#include <psp2/kernel/sysmem.h>
|
||||
#include <psp2/types.h>
|
||||
|
||||
DECLARE_VECTOR(SceUIDList, SceUID);
|
||||
DEFINE_VECTOR(SceUIDList, SceUID);
|
||||
|
||||
static struct SceUIDList uids;
|
||||
static bool listInit = false;
|
||||
|
||||
void* anonymousMemoryMap(size_t size) {
|
||||
if (!listInit) {
|
||||
SceUIDListInit(&uids, 8);
|
||||
listInit = true;
|
||||
}
|
||||
if (size & 0xFFF) {
|
||||
// Align to 4kB pages
|
||||
size += ((~size) & 0xFFF) + 1;
|
||||
|
@ -28,7 +17,6 @@ void* anonymousMemoryMap(size_t size) {
|
|||
if (memblock < 0) {
|
||||
return 0;
|
||||
}
|
||||
*SceUIDListAppend(&uids) = memblock;
|
||||
void* ptr;
|
||||
if (sceKernelGetMemBlockBase(memblock, &ptr) < 0) {
|
||||
return 0;
|
||||
|
@ -37,18 +25,8 @@ void* anonymousMemoryMap(size_t size) {
|
|||
}
|
||||
|
||||
void mappedMemoryFree(void* memory, size_t size) {
|
||||
UNUSED(size);
|
||||
size_t i;
|
||||
for (i = 0; i < SceUIDListSize(&uids); ++i) {
|
||||
SceUID uid = *SceUIDListGetPointer(&uids, i);
|
||||
void* ptr;
|
||||
if (sceKernelGetMemBlockBase(uid, &ptr) < 0) {
|
||||
continue;
|
||||
}
|
||||
if (ptr == memory) {
|
||||
SceUID uid = sceKernelFindMemBlockByAddr(memory, size);
|
||||
if (uid >= 0) {
|
||||
sceKernelFreeMemBlock(uid);
|
||||
SceUIDListShift(&uids, i, 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue