Fix sema and event flag refer to check size.

If it's zero, write nothing, just like the others.
This commit is contained in:
Unknown W. Brackets 2013-05-18 13:46:50 -07:00
parent f649364b2d
commit ac9e936ba8
2 changed files with 14 additions and 3 deletions

View file

@ -661,16 +661,22 @@ int sceKernelPollEventFlag(SceUID id, u32 bits, u32 wait, u32 outBitsPtr, u32 ti
//int sceKernelReferEventFlagStatus(SceUID event, SceKernelEventFlagInfo *status); //int sceKernelReferEventFlagStatus(SceUID event, SceKernelEventFlagInfo *status);
u32 sceKernelReferEventFlagStatus(SceUID id, u32 statusPtr) u32 sceKernelReferEventFlagStatus(SceUID id, u32 statusPtr)
{ {
DEBUG_LOG(HLE, "sceKernelReferEventFlagStatus(%i, %08x)", id, statusPtr);
u32 error; u32 error;
EventFlag *e = kernelObjects.Get<EventFlag>(id, error); EventFlag *e = kernelObjects.Get<EventFlag>(id, error);
if (e) if (e)
{ {
DEBUG_LOG(HLE, "sceKernelReferEventFlagStatus(%i, %08x)", id, statusPtr);
if (!Memory::IsValidAddress(statusPtr))
return -1;
if (Memory::Read_U32(statusPtr) != 0)
Memory::WriteStruct(statusPtr, &e->nef); Memory::WriteStruct(statusPtr, &e->nef);
return 0; return 0;
} }
else else
{ {
ERROR_LOG(HLE, "sceKernelReferEventFlagStatus(%i, %08x): invalid event flag", id, statusPtr);
return error; return error;
} }
} }

View file

@ -328,6 +328,11 @@ int sceKernelReferSemaStatus(SceUID id, u32 infoPtr)
if (s) if (s)
{ {
DEBUG_LOG(HLE, "sceKernelReferSemaStatus(%i, %08x)", id, infoPtr); DEBUG_LOG(HLE, "sceKernelReferSemaStatus(%i, %08x)", id, infoPtr);
if (!Memory::IsValidAddress(infoPtr))
return -1;
if (Memory::Read_U32(infoPtr) != 0)
Memory::WriteStruct(infoPtr, &s->ns); Memory::WriteStruct(infoPtr, &s->ns);
return 0; return 0;
} }