Just tagging @suloku and @smealum in this thread.
I don't use XML titles myself but am trying to get them working in gridlauncher as it's a frequently requested feature. I'm having a really difficult time working out what is actually different between gridlauncher and suloku's changes. The handling of title selection in the menu is completely different, so I added some logging just before the titles get booted at the end of main():
In both cases (with both launchers), if I run the Ironhax installer then I get the path to the Ironhax installer 3dsx show in the log. This means that bootApp is being called with the path to the 3dsx executable as its first parameter. I am using bootApp() from suloku's launcher boot.c as well (but passing NULL as the arg parameter as I haven't implemented HANS launching yet), so I can't see any difference between what the gridlauncher is doing and what Suloku's launcher is doing.
Any help would be much appreciated!
I don't use XML titles myself but am trying to get them working in gridlauncher as it's a frequently requested feature. I'm having a really difficult time working out what is actually different between gridlauncher and suloku's changes. The handling of title selection in the menu is completely different, so I added some logging just before the titles get booted at the end of main():
Code:
//Gridlauncher main.c
int main() {
// ...
if(!strcmp(me->executablePath, REGIONFREE_PATH) && regionFreeAvailable && !netloader_boot) {
logText("Region free boot");
}
else {
logText(me->executablePath);
}
exitServices();
if(!strcmp(me->executablePath, REGIONFREE_PATH) && regionFreeAvailable && !netloader_boot) {
return regionFreeRun2(target_title.title_id & 0xffffffff, (target_title.title_id >> 32) & 0xffffffff, target_title.mediatype, 0x1);
}
regionFreeExit();
return bootApp(me->executablePath, &me->descriptor.executableMetadata, NULL);
}
Code:
//Suloku's launcher main.c
int main() {
// ...
if(!strcmp(me->executablePath, REGIONFREE_PATH) && regionFreeAvailable && !netloader_boot){
logText("Title boot");
}
else {
logText(me->executablePath);
}
// cleanup whatever we have to cleanup
netloader_exit();
titlesExit();
ptmExit();
acExit();
hidExit();
gfxExit();
closeSDArchive();
exitFilesystem();
aptExit();
srvExit();
//Title launching
if(!strcmp(me->executablePath, REGIONFREE_PATH) && regionFreeAvailable && !netloader_boot){
if (strlen(HansPath) > 0){
regionFreeExit();
return bootApp(HansPath, NULL, HansArg);
}else{
return regionFreeRun2(target_title.title_id & 0xffffffff, (target_title.title_id >> 32) & 0xffffffff, target_title.mediatype, 0x1);
}
}
regionFreeExit();
return bootApp(me->executablePath, &me->descriptor.executableMetadata, me->arg);
}
In both cases (with both launchers), if I run the Ironhax installer then I get the path to the Ironhax installer 3dsx show in the log. This means that bootApp is being called with the path to the 3dsx executable as its first parameter. I am using bootApp() from suloku's launcher boot.c as well (but passing NULL as the arg parameter as I haven't implemented HANS launching yet), so I can't see any difference between what the gridlauncher is doing and what Suloku's launcher is doing.
Any help would be much appreciated!