mirror of
https://github.com/wiiu-env/MochaPayload.git
synced 2024-11-25 17:26:53 +01:00
Fix loading .rpx bigger than 4MiB
This commit is contained in:
parent
36ac8626f0
commit
8bb7cf0076
@ -30,7 +30,6 @@ int (*const MCP_DoLoadFile)(const char *path, const char *path2, void *outputBuf
|
|||||||
static int MCP_LoadCustomFile(int target, char *path, int filesize, int fileoffset, void *out_buffer, int buffer_len, int pos);
|
static int MCP_LoadCustomFile(int target, char *path, int filesize, int fileoffset, void *out_buffer, int buffer_len, int pos);
|
||||||
|
|
||||||
static bool skipPPCSetup = false;
|
static bool skipPPCSetup = false;
|
||||||
static bool didrpxfirstchunk = false;
|
|
||||||
static bool doWantReplaceRPX = false;
|
static bool doWantReplaceRPX = false;
|
||||||
static bool replace_target_device = 0;
|
static bool replace_target_device = 0;
|
||||||
static uint32_t rep_filesize = 0;
|
static uint32_t rep_filesize = 0;
|
||||||
@ -73,23 +72,11 @@ int _MCP_LoadFile_patch(ipcmessage *msg) {
|
|||||||
// The men.rpx is hooked until the "IPC_CUSTOM_MEN_RPX_HOOK_COMPLETED" command is passed to IOCTL 0x100.
|
// The men.rpx is hooked until the "IPC_CUSTOM_MEN_RPX_HOOK_COMPLETED" command is passed to IOCTL 0x100.
|
||||||
// If the loading of the replacement file fails, the Wii U Menu is loaded normally.
|
// If the loading of the replacement file fails, the Wii U Menu is loaded normally.
|
||||||
replace_target = LOAD_FILE_TARGET_SD_CARD;
|
replace_target = LOAD_FILE_TARGET_SD_CARD;
|
||||||
|
replace_filesize = 0; // unknown
|
||||||
|
replace_fileoffset = 0;
|
||||||
int result = MCP_LoadCustomFile(replace_target, replace_path, 0, 0, msg->ioctl.buffer_io, msg->ioctl.length_io, request->pos);
|
|
||||||
|
|
||||||
if (result >= 0) {
|
|
||||||
return result;
|
|
||||||
} else {
|
|
||||||
// on error don't try it again.
|
|
||||||
skipPPCSetup = true;
|
|
||||||
}
|
|
||||||
} else if (strncmp(request->name, "safe.rpx", strlen("safe.rpx")) == 0) {
|
} else if (strncmp(request->name, "safe.rpx", strlen("safe.rpx")) == 0) {
|
||||||
if (request->pos == 0) {
|
|
||||||
didrpxfirstchunk = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if we don't explicitly replace files, we do want replace the Health and Safety app with the HBL
|
// if we don't explicitly replace files, we do want replace the Health and Safety app with the HBL
|
||||||
if (!doWantReplaceRPX) {
|
if (request->pos == 0 && !doWantReplaceRPX) {
|
||||||
replace_path = "wiiu/apps/homebrew_launcher/homebrew_launcher.rpx";
|
replace_path = "wiiu/apps/homebrew_launcher/homebrew_launcher.rpx";
|
||||||
replace_target = LOAD_FILE_TARGET_SD_CARD;
|
replace_target = LOAD_FILE_TARGET_SD_CARD;
|
||||||
//doWantReplaceXML = false;
|
//doWantReplaceXML = false;
|
||||||
@ -97,22 +84,20 @@ int _MCP_LoadFile_patch(ipcmessage *msg) {
|
|||||||
replace_filesize = 0; // unknown
|
replace_filesize = 0; // unknown
|
||||||
replace_fileoffset = 0;
|
replace_fileoffset = 0;
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
|
doWantReplaceRPX = false; // Only replace it once.
|
||||||
|
replace_path = NULL;
|
||||||
|
return real_MCP_LoadFile(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (replace_path != NULL && strlen(replace_path) > 0) {
|
if (replace_path != NULL && strlen(replace_path) > 0) {
|
||||||
if (!didrpxfirstchunk || request->pos > 0) {
|
doWantReplaceRPX = false; // Only replace it once.
|
||||||
doWantReplaceRPX = false; // Only replace it once.
|
int result = MCP_LoadCustomFile(replace_target, replace_path, replace_filesize, replace_fileoffset, msg->ioctl.buffer_io, msg->ioctl.length_io, request->pos);
|
||||||
int result = MCP_LoadCustomFile(replace_target, replace_path, replace_filesize, replace_fileoffset, msg->ioctl.buffer_io, msg->ioctl.length_io, request->pos);
|
|
||||||
|
|
||||||
if (result >= 0) {
|
if (result >= 0) {
|
||||||
if (request->pos == 0) {
|
return result;
|
||||||
didrpxfirstchunk = true;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
} else {
|
|
||||||
// TODO, what happens if we already replaced the app/cos xml files and then the loading fails?
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return real_MCP_LoadFile(msg);
|
return real_MCP_LoadFile(msg);
|
||||||
@ -271,7 +256,6 @@ int _MCP_ioctl100_patch(ipcmessage *msg) {
|
|||||||
|
|
||||||
rep_filesize = filesize;
|
rep_filesize = filesize;
|
||||||
rep_fileoffset = fileoffset;
|
rep_fileoffset = fileoffset;
|
||||||
didrpxfirstchunk = false;
|
|
||||||
doWantReplaceRPX = true;
|
doWantReplaceRPX = true;
|
||||||
//doWantReplaceXML = true;
|
//doWantReplaceXML = true;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user