Fix exit to shell not working

This commit is contained in:
elasota
2020-11-30 03:18:09 -05:00
parent 553e343abe
commit cab862ed8b
5 changed files with 31 additions and 5 deletions

View File

@@ -10,7 +10,7 @@ namespace PortabilityLayer
HostSuspendCallID_Delay,
HostSuspendCallID_CallOnVOSThread,
HostSuspendCallID_ForceSyncFrame
HostSuspendCallID_ForceSyncFrame,
};
}

View File

@@ -16,6 +16,9 @@
#include "PLDrivers.h"
#include <assert.h>
#include <setjmp.h>
static void TranslateMouseInputEvent(const GpVOSEvent &vosEventBase, uint32_t timestamp, PortabilityLayer::EventQueue *queue)
{
const GpMouseInputEvent &vosEvent = vosEventBase.m_event.m_mouseInputEvent;
@@ -198,4 +201,24 @@ namespace PLSysCalls
PortabilityLayer::SuspendApplication(PortabilityLayer::HostSuspendCallID_CallOnVOSThread, args, nullptr);
}
static jmp_buf gs_mainExitWrapper;
static int gs_exitCode = 0;
void Exit(int exitCode)
{
gs_exitCode = exitCode;
longjmp(gs_mainExitWrapper, 1);
}
int MainExitWrapper(int (*mainFunc)())
{
if (!setjmp(gs_mainExitWrapper))
{
int returnCode = mainFunc();
return returnCode;
}
else
return gs_exitCode;
}
}

View File

@@ -9,4 +9,7 @@ namespace PLSysCalls
void Sleep(uint32_t ticks);
void ForceSyncFrame();
void RunOnVOSThread(void(*callback)(void *context), void *context);
void Exit(int exitCode);
int MainExitWrapper(int (*mainFunc)());
}