mirror of
https://github.com/elasota/Aerofoil.git
synced 2025-12-14 03:59:36 +00:00
Fix exit to shell not working
This commit is contained in:
@@ -10,7 +10,7 @@ namespace PortabilityLayer
|
||||
|
||||
HostSuspendCallID_Delay,
|
||||
HostSuspendCallID_CallOnVOSThread,
|
||||
HostSuspendCallID_ForceSyncFrame
|
||||
HostSuspendCallID_ForceSyncFrame,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user