mirror of
https://github.com/wiiu-env/CustomRPXLoader.git
synced 2024-11-22 09:59:17 +01:00
Cleanup memory before calling the .rpx
This commit is contained in:
parent
9837a8457f
commit
9aa4f34190
21
src/main.cpp
21
src/main.cpp
@ -44,7 +44,7 @@ bool doRelocation(const std::vector<RelocationData> &relocData, relocation_tramp
|
|||||||
|
|
||||||
void SplashScreen(const char *message, int32_t durationInMs);
|
void SplashScreen(const char *message, int32_t durationInMs);
|
||||||
|
|
||||||
int do_start(int argc, char **argv);
|
uint32_t do_start(int argc, char **argv);
|
||||||
|
|
||||||
bool CheckRunning() {
|
bool CheckRunning() {
|
||||||
switch (ProcUIProcessMessages(true)) {
|
switch (ProcUIProcessMessages(true)) {
|
||||||
@ -68,8 +68,6 @@ bool CheckRunning() {
|
|||||||
extern "C" void __init_wut();
|
extern "C" void __init_wut();
|
||||||
extern "C" void __fini_wut();
|
extern "C" void __fini_wut();
|
||||||
|
|
||||||
extern "C" void _SYSLaunchMenuWithCheckingAccount(nn::act::SlotNo slot);
|
|
||||||
|
|
||||||
extern "C" int _start(int argc, char **argv) {
|
extern "C" int _start(int argc, char **argv) {
|
||||||
doKernelSetup();
|
doKernelSetup();
|
||||||
InitFunctionPointers();
|
InitFunctionPointers();
|
||||||
@ -86,6 +84,8 @@ extern "C" int _start(int argc, char **argv) {
|
|||||||
|
|
||||||
int res = do_start(argc, argv);
|
int res = do_start(argc, argv);
|
||||||
|
|
||||||
|
uint32_t entrypoint = do_start(argc, argv);
|
||||||
|
|
||||||
// free leaked memory
|
// free leaked memory
|
||||||
if (memory_start) {
|
if (memory_start) {
|
||||||
int leak_count = 0;
|
int leak_count = 0;
|
||||||
@ -103,10 +103,16 @@ extern "C" int _start(int argc, char **argv) {
|
|||||||
WHBLogUdpDeinit();
|
WHBLogUdpDeinit();
|
||||||
|
|
||||||
__fini_wut();
|
__fini_wut();
|
||||||
return res;
|
|
||||||
|
if (entrypoint > 0) {
|
||||||
|
((int (*)(int, char **)) entrypoint)(argc, argv);
|
||||||
|
_Exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int do_start(int argc, char **argv) {
|
uint32_t do_start(int argc, char **argv) {
|
||||||
// If we load from our CustomRPXLoader the argv is set with "safe.rpx"
|
// If we load from our CustomRPXLoader the argv is set with "safe.rpx"
|
||||||
// in this case we don't want to do any ProcUi stuff on error, only on success
|
// in this case we don't want to do any ProcUi stuff on error, only on success
|
||||||
bool doProcUI = (argc >= 1 && std::string(argv[0]) != "safe.rpx");
|
bool doProcUI = (argc >= 1 && std::string(argv[0]) != "safe.rpx");
|
||||||
@ -146,13 +152,12 @@ int do_start(int argc, char **argv) {
|
|||||||
DCFlushRange((void *) 0x00800000, 0x00800000);
|
DCFlushRange((void *) 0x00800000, 0x00800000);
|
||||||
ICInvalidateRange((void *) 0x00800000, 0x00800000);
|
ICInvalidateRange((void *) 0x00800000, 0x00800000);
|
||||||
DEBUG_FUNCTION_LINE("Calling entrypoint at: %08X", moduleData->getEntrypoint());
|
DEBUG_FUNCTION_LINE("Calling entrypoint at: %08X", moduleData->getEntrypoint());
|
||||||
((int (*)(int, char **)) moduleData->getEntrypoint())(argc, argv);
|
return moduleData->getEntrypoint();
|
||||||
doProcUI = true;
|
|
||||||
} else {
|
} else {
|
||||||
DEBUG_FUNCTION_LINE("Failed to load module, revert main_hook");
|
DEBUG_FUNCTION_LINE("Failed to load module, revert main_hook");
|
||||||
revertMainHook();
|
revertMainHook();
|
||||||
SplashScreen(StringTools::strfmt("Failed to load \"%s\"", filepath.c_str()).c_str(), 3000);
|
SplashScreen(StringTools::strfmt("Failed to load \"%s\"", filepath.c_str()).c_str(), 3000);
|
||||||
result = -1;
|
result = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (doProcUI) {
|
if (doProcUI) {
|
||||||
|
Loading…
Reference in New Issue
Block a user