From be6092e1e9e3c33dc4e5b2f7c145d18756f512d0 Mon Sep 17 00:00:00 2001 From: cyan06 Date: Tue, 7 Jul 2015 19:34:32 +0000 Subject: [PATCH] * Fixed compiling on Mac/Linux * Fixed "return to NK2O" not working with neek. --- HBC/META.XML | 4 +- source/settings/meta.cpp | 236 ++++++++++++++++---------------- source/settings/meta.h | 60 ++++---- source/usbloader/GameBooter.cpp | 18 ++- 4 files changed, 161 insertions(+), 157 deletions(-) diff --git a/HBC/META.XML b/HBC/META.XML index 17ef8857..bc5c2cbc 100644 --- a/HBC/META.XML +++ b/HBC/META.XML @@ -2,8 +2,8 @@ USB Loader GX USB Loader GX Team - 3.0 r1250 - 20150705141019 + 3.0 r1251 + 20150707190220 ") != NULL) - { - strcpy(line, " \n"); - } - - // generate argurments - if(strstr(line, "") != NULL) - { - fputs(line, destination); - snprintf(line, max_line_size, " --ios=%d\n", Settings.LoaderIOS); - fputs(line, destination); - snprintf(line, max_line_size, " --usbport=%d\n", Settings.USBPort); - fputs(line, destination); - snprintf(line, max_line_size, " --mountusb=%d\n", Settings.USBAutoMount); - fputs(line, destination); - - while(strstr(line, "") == NULL) - { - fgets(line, max_line_size, source); // advance one line - if(feof(source)) - { - fclose(source); - fclose(destination); - delete [] line; - return 0; - } - } - } - fputs(line, destination); - } - - fclose(source); - fclose(destination); - delete [] line; - - if(CopyFile(metatmppath, metapath) <0) - return 0; - - RemoveFile(metatmppath); - - return 1; -} +/* +Copyright (c) 2014 - Cyan + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not +claim that you wrote the original software. If you use this software +in a product, an acknowledgment in the product documentation would be +appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not be +misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ +#include "homebrewboot\HomebrewXML.h" +#include "FileOperations\fileops.h" +#include "settings\CSettings.h" +#include "svnrev.h" + +int updateMetaXML (void) +{ + HomebrewXML MetaXML; + char filepath[255]; + snprintf(filepath, sizeof(filepath), "%s/meta.xml", Settings.update_path); + if(!MetaXML.LoadHomebrewXMLData(filepath)) + return 0; + + char line[50]; + snprintf(line, sizeof(line), "--ios=%d", Settings.LoaderIOS); + MetaXML.SetArgument(line); + snprintf(line, sizeof(line), "--usbport=%d", Settings.USBPort); + MetaXML.SetArgument(line); + snprintf(line, sizeof(line), "--mountusb=%d", Settings.USBAutoMount); + MetaXML.SetArgument(line); + snprintf(line, sizeof(line), "3.0 r%s", GetRev()); + MetaXML.SetVersion(line); + + int ret = MetaXML.SaveHomebrewXMLData(filepath); + return ret; +} + +int editMetaArguments (void) +{ + char metapath[255] = ""; + char metatmppath[255] = ""; + + snprintf(metapath, sizeof(metapath), "%s/meta.xml", Settings.update_path); + snprintf(metatmppath, sizeof(metatmppath), "%s/meta.tmp", Settings.update_path); + + FILE *source = fopen(metapath, "rb"); + if(!source) + { + return 0; + } + + FILE *destination = fopen(metatmppath, "wb"); + if(!destination) + { + fclose(source); + return 0; + } + + const int max_line_size = 255; + char *line = new char[max_line_size]; + while (fgets(line, max_line_size, source) != NULL) + { + // delete commented lines + if( strstr(line, "") != NULL) + { + strcpy(line, " \n"); + } + + // generate argurments + if(strstr(line, "") != NULL) + { + fputs(line, destination); + snprintf(line, max_line_size, " --ios=%d\n", Settings.LoaderIOS); + fputs(line, destination); + snprintf(line, max_line_size, " --usbport=%d\n", Settings.USBPort); + fputs(line, destination); + snprintf(line, max_line_size, " --mountusb=%d\n", Settings.USBAutoMount); + fputs(line, destination); + + while(strstr(line, "") == NULL) + { + fgets(line, max_line_size, source); // advance one line + if(feof(source)) + { + fclose(source); + fclose(destination); + delete [] line; + return 0; + } + } + } + fputs(line, destination); + } + + fclose(source); + fclose(destination); + delete [] line; + + if(CopyFile(metatmppath, metapath) <0) + return 0; + + RemoveFile(metatmppath); + + return 1; +} diff --git a/source/settings/meta.h b/source/settings/meta.h index 55fbaeca..98bb6fac 100644 --- a/source/settings/meta.h +++ b/source/settings/meta.h @@ -1,30 +1,30 @@ -/**************************************************************************** - * Copyright (C) 2014 - * by cyan - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any - * damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any - * purpose, including commercial applications, and to alter it and - * redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you use - * this software in a product, an acknowledgment in the product - * documentation would be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and - * must not be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - ***************************************************************************/ -#ifndef _META_H_ -#define _META_H_ - -int updateMetaXML(void); -int editMetaArguments(void); - -#endif +/**************************************************************************** + * Copyright (C) 2014 + * by cyan + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#ifndef _META_H_ +#define _META_H_ + +int updateMetaXML(void); +int editMetaArguments(void); + +#endif diff --git a/source/usbloader/GameBooter.cpp b/source/usbloader/GameBooter.cpp index 491b8b20..93c024ac 100644 --- a/source/usbloader/GameBooter.cpp +++ b/source/usbloader/GameBooter.cpp @@ -1547,6 +1547,7 @@ int GameBooter::BootNeek(struct discHdr *gameHdr) u64 returnToChoice = game_cfg->returnTo; const char *NandEmuPath = game_cfg->NandEmuPath.size() == 0 ? Settings.NandEmuChanPath : game_cfg->NandEmuPath.c_str(); bool autoboot = true; + bool NK2O_isInstalled = false; char tempPath[100] = ""; int ret = -1; @@ -1655,6 +1656,12 @@ int GameBooter::BootNeek(struct discHdr *gameHdr) if(CheckFile(tempPath)) RemoveFile(tempPath); } + else + { + snprintf(tempPath, sizeof(tempPath), "%s/title/00010001/4e4b324f/content/title.tmd", NandEmuPath); + if(CheckFile(tempPath)) + NK2O_isInstalled = true; + } // Every checks passed successfully. Continue execution. @@ -1684,19 +1691,16 @@ int GameBooter::BootNeek(struct discHdr *gameHdr) if(autoboot && returnToChoice) { // Todo : allow user to select the channel to return to. - - // check if NK2O is installed - snprintf(tempPath, sizeof(tempPath), "%s/title/00010001/4e4b324f/content/title.tmd", NandEmuPath); - if(CheckFile(tempPath)) + if(NK2O_isInstalled) { neek_config->returnto = TITLE_ID(0x00010001, 'NK2O'); // Currently forced to NK2O user channel - neek_config->config |= NCON_EXT_RETURN_TO; // enable "return to" patch + neek_config->config |= NCON_EXT_RETURN_TO; // enable "return to" patch } if(isWiiU()) { - neek_config->returnto = TITLE_ID(0x00010002, 'HCVA');// Currently forced to "Return to WiiU" system channel - neek_config->config |= NCON_EXT_RETURN_TO; // enable "return to" patch + neek_config->returnto = TITLE_ID(0x00010002, 'HCVA'); // Currently forced to "Return to WiiU" system channel + neek_config->config |= NCON_EXT_RETURN_TO; // enable "return to" patch } }