diff --git a/source/FileOperations/fileops.cpp b/source/FileOperations/fileops.cpp index 4e23f9f7..5893d57f 100644 --- a/source/FileOperations/fileops.cpp +++ b/source/FileOperations/fileops.cpp @@ -447,15 +447,11 @@ extern "C" bool RemoveDirectory(const char *path) RemoveFile(dir.GetFilepath(i)); done++; } - } - - //! now remove all folders - for(int i = 0; i < fileCount; i++) - { - if(dir.IsDir(i)) + else { + //! remove all folders ShowProgress(tr("Deleting directories..."), dir.GetFilename(i), 0, done, fileCount, false, false); - RemoveFile(dir.GetFilepath(i)); + rmdir(dir.GetFilepath(i)); done++; gprintf("%s\n", dir.GetFilepath(i)); } @@ -464,11 +460,11 @@ extern "C" bool RemoveDirectory(const char *path) ProgressStop(); ProgressCancelEnable(false); - return (remove(folderpath.c_str()) == 0); + return (rmdir(folderpath.c_str()) == 0); } /**************************************************************************** - * RemoveDirectory + * CopyDirectory ***************************************************************************/ extern "C" int CopyDirectory(const char *path, const char *dst) { diff --git a/source/GUI/gui_text.cpp b/source/GUI/gui_text.cpp index bd5e406e..6cc93a6f 100644 --- a/source/GUI/gui_text.cpp +++ b/source/GUI/gui_text.cpp @@ -238,18 +238,18 @@ void GuiText::SetFontSize(int s) size = s; } -void GuiText::SetMaxWidth(int width, int w) +void GuiText::SetMaxWidth(int w, int m) { //! no need to reset timer on false set - if(wrapMode == w && maxWidth == width) + if(wrapMode == m && maxWidth == w) return; LOCK( this ); - maxWidth = width; - wrapMode = w; + maxWidth = w; + wrapMode = m; - if (w == SCROLL_HORIZONTAL) + if (m == SCROLL_HORIZONTAL) { textScrollPos = 0; textScrollInitialDelay = TEXT_SCROLL_INITIAL_DELAY; diff --git a/source/GameCube/GCDumper.cpp b/source/GameCube/GCDumper.cpp index 0f393337..bc136d87 100644 --- a/source/GameCube/GCDumper.cpp +++ b/source/GameCube/GCDumper.cpp @@ -264,16 +264,16 @@ s32 GCDumper::InstallGame(const char *installpath, u32 game, const char *install char gamepath[512]; // snprintf(gamepath, sizeof(gamepath), "%s%s [%.6s]%s/", installpath, gametitle, gcheader.id, Disc ? "2" : ""); // Disc2 currently needs to be on the same folder. - snprintf(gamepath, sizeof(gamepath), "%s%s [%.6s]/", installpath, gametitle, gcheader.id); + int n = snprintf(gamepath, sizeof(gamepath), "%s%s [%.6s]/", installpath, gametitle, gcheader.id); // If another Disc from the same gameID already exists, let's use that path if(strlen((char *)installedGamePath) != 0) - snprintf(gamepath, sizeof(gamepath), "%s/", installedGamePath); + n = snprintf(gamepath, sizeof(gamepath), "%s/", installedGamePath); CreateSubfolder(gamepath); // snprintf(gamepath, sizeof(gamepath), "%s%s [%.6s]%s/game.iso", installpath, gametitle, gcheader.id, Disc ? "2" : ""); // Disc2 currently needs to be on the same folder. - snprintf(gamepath, sizeof(gamepath), "%s%s.iso", gamepath, Disc ? "disc2" : "game"); + snprintf(gamepath + n, sizeof(gamepath) - n, "%s.iso", Disc ? "disc2" : "game"); FILE *f = fopen(gamepath, "wb"); if(!f) diff --git a/source/GameCube/GCGames.cpp b/source/GameCube/GCGames.cpp index 07129a42..d15bfa02 100644 --- a/source/GameCube/GCGames.cpp +++ b/source/GameCube/GCGames.cpp @@ -121,7 +121,7 @@ void GCGames::LoadGameList(const string &path, vector &headerLis snprintf(name, sizeof(name), "%.6s.%s", (i % 2) == 0 ? "game" : (char *) id, i >= 2 ? "gcm" : "iso"); snprintf(fpath, sizeof(fpath), "%s%s/%s", path.c_str(), dirname, name); if((found = (stat(fpath, &st) == 0)) == true) - break; + break; } // Check if only disc2.iso is present @@ -402,10 +402,10 @@ bool GCGames::IsInstalled(const char *gameID, u8 disc_number) const else if(disc_number == 1) // Check if the second Game Disc exists in the same folder than Disc1. { char filepath[512]; - snprintf(filepath, sizeof(filepath), "%s", GetPath(gameID)); + int n = snprintf(filepath, sizeof(filepath), "%s", GetPath(gameID)); char *pathPtr = strrchr(filepath, '/'); if(pathPtr) *pathPtr = 0; - snprintf(filepath, sizeof(filepath), "%s/disc2.iso", filepath); + snprintf(filepath + n, sizeof(filepath) - n, "/disc2.iso"); if(CheckFile(filepath)) return true; diff --git a/source/cheats/gct.cpp b/source/cheats/gct.cpp index 26283bb4..810894a7 100644 --- a/source/cheats/gct.cpp +++ b/source/cheats/gct.cpp @@ -145,7 +145,11 @@ int GCTCheats::openTxtfile(const char * filename) const int max_line_size = 4096; char *line = new (std::nothrow) char[max_line_size]; - if(!line) return -1; + if (!line) + { + fclose(pFile); + return -1; + } fgets(line, max_line_size, pFile); RemoveLineEnds(line); @@ -158,7 +162,7 @@ int GCTCheats::openTxtfile(const char * filename) { RemoveLineEnds(line); - if(*line == 0) + if (*line == 0) continue; // first line is the cheat name @@ -169,7 +173,7 @@ int GCTCheats::openTxtfile(const char * filename) { RemoveLineEnds(line); - if(*line == 0) // empty line means start of new cheat + if (*line == 0) // empty line means start of new cheat break; if (IsCode(line)) @@ -187,7 +191,7 @@ int GCTCheats::openTxtfile(const char * filename) } } - if(!cheatEntry.sCheats.empty()) + if (!cheatEntry.sCheats.empty()) cheatList.push_back(cheatEntry); } fclose(pFile); diff --git a/source/homebrewboot/BootHomebrew.cpp b/source/homebrewboot/BootHomebrew.cpp index 532d7692..21cec4f8 100644 --- a/source/homebrewboot/BootHomebrew.cpp +++ b/source/homebrewboot/BootHomebrew.cpp @@ -172,6 +172,7 @@ int BootHomebrew(const char * filepath) fclose(file); DeviceHandler::DestroyInstance(); Sys_BackToLoader(); + return -1; } homebrewsize = filesize; diff --git a/source/homebrewboot/HomebrewXML.cpp b/source/homebrewboot/HomebrewXML.cpp index 5ccb09ef..810d7d99 100644 --- a/source/homebrewboot/HomebrewXML.cpp +++ b/source/homebrewboot/HomebrewXML.cpp @@ -68,8 +68,6 @@ int HomebrewXML::LoadHomebrewXMLData(const char* filename) snprintf(ReleaseText, sizeof(ReleaseText), "%c%c/%c%c/%c%c%c%c", ReleaseText[4], ReleaseText[5], ReleaseText[6], ReleaseText[7], ReleaseText[0], ReleaseText[1], ReleaseText[2], ReleaseText[3]); else if (len == 6) snprintf(ReleaseText, sizeof(ReleaseText), "%c%c/%c%c%c%c", ReleaseText[4], ReleaseText[5], ReleaseText[0], ReleaseText[1], ReleaseText[2], ReleaseText[3]); - else - snprintf(ReleaseText, sizeof(ReleaseText), "%s", ReleaseText); Releasedate = ReleaseText; diff --git a/source/libs/libwbfs/libwbfs.c b/source/libs/libwbfs/libwbfs.c index efe0c647..c643ccd7 100644 --- a/source/libs/libwbfs/libwbfs.c +++ b/source/libs/libwbfs/libwbfs.c @@ -342,7 +342,7 @@ u32 wbfs_count_usedblocks(wbfs_t*p) if (v == ~0U) count += 32; else if (v != 0) for (j = 0; j < 32; j++) - if (v & (1 << j)) count++; + if (v & (1U << j)) count++; } return count; } @@ -369,7 +369,7 @@ static u32 alloc_block(wbfs_t*p) if (v != 0) { for (j = 0; j < 32; j++) - if (v & (1 << j)) + if (v & (1U << j)) { p->freeblks[i] = wbfs_htonl( v & ~( 1 << j ) ); return (i * 32) + j + 1; diff --git a/source/mload/mload_modules.c b/source/mload/mload_modules.c index b8a7c585..c1a61aa6 100644 --- a/source/mload/mload_modules.c +++ b/source/mload/mload_modules.c @@ -215,7 +215,8 @@ bool shadow_mload() { int ios = IOS_GetVersion(); - if(ios != 222 || ios != 223 || ios != 224) + // Allow only Hermes cIOS 222, 223 & 224 + if (ios < 222 || ios > 224) return false; int v51 = (5 << 4) & 1; diff --git a/source/patches/gamepatches.c b/source/patches/gamepatches.c index 6863f100..a1e568ab 100644 --- a/source/patches/gamepatches.c +++ b/source/patches/gamepatches.c @@ -360,7 +360,7 @@ u32 do_new_wiimmfi() // Binary blobs with Wiimmfi patches. Do not modify. // Provided by Leseratte on 2018-12-14. - int binary[] = { 0x37C849A2, 0x8BC32FA4, 0xC9A34B71, 0x1BCB49A2, + u32 binary[] = { 0x37C849A2, 0x8BC32FA4, 0xC9A34B71, 0x1BCB49A2, 0x2F119304, 0x5F402684, 0x3E4FDA29, 0x50849A21, 0xB88B3452, 0x627FC9C1, 0xDC24D119, 0x5844350F, 0xD893444F, 0x19A588DC, 0x16C91184, 0x0C3E237C, diff --git a/source/prompts/GameWindow.cpp b/source/prompts/GameWindow.cpp index b18b681d..992d48e2 100644 --- a/source/prompts/GameWindow.cpp +++ b/source/prompts/GameWindow.cpp @@ -740,11 +740,11 @@ void GameWindow::BootGame(struct discHdr *header) if (game_cfg->loadalternatedol == 2) { char filepath[200]; - snprintf(filepath, sizeof(filepath), "%s%s.dol", Settings.dolpath, IDfull); + int n = snprintf(filepath, sizeof(filepath), "%s%s.dol", Settings.dolpath, IDfull); if (CheckFile(filepath) == false) { - sprintf(filepath, "%s %s", filepath, tr( "does not exist!" )); - if(!WindowPrompt(tr( "Error" ), filepath, tr( "Continue" ), tr( "Cancel"))) + snprintf(filepath + n, sizeof(filepath) - n, " %s", tr( "does not exist!" )); + if (!WindowPrompt(tr( "Error" ), filepath, tr( "Continue" ), tr( "Cancel"))) return; } } @@ -762,10 +762,10 @@ void GameWindow::BootGame(struct discHdr *header) if (game_cfg->ocarina == ON || (game_cfg->ocarina == INHERIT && Settings.ocarina == ON)) { char filepath[200]; - snprintf(filepath, sizeof(filepath), "%s%s.gct", Settings.Cheatcodespath, IDfull); + int n = snprintf(filepath, sizeof(filepath), "%s%s.gct", Settings.Cheatcodespath, IDfull); if (CheckFile(filepath) == false) { - sprintf(filepath, "%s %s", filepath, tr( "does not exist! Loading game without cheats." )); + snprintf(filepath + n, sizeof(filepath) - n, " %s", tr( "does not exist! Loading game without cheats." )); if(!WindowPrompt(tr( "Error" ), filepath, tr( "Continue" ), tr( "Cancel"))) return; } diff --git a/source/prompts/PromptWindows.cpp b/source/prompts/PromptWindows.cpp index 41d479b7..2b6cf8a0 100644 --- a/source/prompts/PromptWindows.cpp +++ b/source/prompts/PromptWindows.cpp @@ -298,9 +298,9 @@ void WindowCredits() char SvnRev[80]; #ifdef FULLCHANNEL - snprintf(SvnRev, sizeof(SvnRev), "Rev%sc IOS%u (Rev %u)%s", GetRev(), IOS_GetVersion(), IOS_GetRevision(), (*(vu32*)0xcd800064 == 0xFFFFFFFF)? " + AHB" : "" ); + snprintf(SvnRev, sizeof(SvnRev), "Rev%sc IOS%d (Rev %d)%s", GetRev(), (int)IOS_GetVersion(), (int)IOS_GetRevision(), (*(vu32*)0xcd800064 == 0xFFFFFFFF)? " + AHB" : "" ); #else - snprintf(SvnRev, sizeof(SvnRev), "Rev%s IOS%u (Rev %u)%s", GetRev(), (unsigned int)IOS_GetVersion(), (int)IOS_GetRevision(), (*(vu32*)0xcd800064 == 0xFFFFFFFF)? " + AHB" : "" ); + snprintf(SvnRev, sizeof(SvnRev), "Rev%s IOS%d (Rev %d)%s", GetRev(), (int)IOS_GetVersion(), (int)IOS_GetRevision(), (*(vu32*)0xcd800064 == 0xFFFFFFFF)? " + AHB" : "" ); #endif char IosInfo[80] = ""; @@ -333,7 +333,7 @@ void WindowCredits() char *ptr = strchr(version, ' '); if(ptr) *ptr = 0; else version[4] = 0; - snprintf(GCInfo, sizeof(GCInfo), "%s%sDevolution r%d", GCInfo, strlen(GCInfo) > 1 ? " / " : "", atoi(version)); + snprintf(GCInfo + strlen(GCInfo), sizeof(GCInfo) - strlen(GCInfo), "%sDevolution r%d", strlen(GCInfo) > 1 ? " / " : "", atoi(version)); } // Check if Nintendont is available @@ -393,7 +393,7 @@ void WindowCredits() currentTxt->SetFont(creditsFont, creditsFontSize); txt.push_back(currentTxt); - currentTxt = new GuiText("http://sourceforge.net/p/usbloadergx/", 20, ( GXColor ) {255, 255, 255, 255}); + currentTxt = new GuiText("https://sourceforge.net/p/usbloadergx/", 20, ( GXColor ) {255, 255, 255, 255}); currentTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP); currentTxt->SetPosition(160, y); currentTxt->SetFont(creditsFont, creditsFontSize); @@ -1199,7 +1199,7 @@ int FormatingPartition(const char *title, int part_num) int portPart = DeviceHandler::PartitionToPortPartition(part_num); char text[255]; - sprintf(text, "%s: %.2fGB", tr( "Partition" ), usbHandle->GetSize(portPart) / GB_SIZE); + int n = sprintf(text, "%s: %.2fGB", tr( "Partition" ), usbHandle->GetSize(portPart) / GB_SIZE); int choice = WindowPrompt(tr( "Do you want to format:" ), text, tr( "Yes" ), tr( "No" )); if (choice == 0) return -666; @@ -1248,7 +1248,7 @@ int FormatingPartition(const char *title, int part_num) partition->FSName = "WBFS"; sleep(1); ret = WBFS_OpenPart(part_num); - sprintf(text, "%s %s", text, tr( "formatted!" )); + snprintf(text + n, sizeof(text) - n, " %s", tr( "formatted!" )); WindowPrompt(tr( "Success:" ), text, tr( "OK" )); if (ret < 0) { @@ -1457,67 +1457,63 @@ int CodeDownload(const char *id) if (IsNetworkInit()) { char txtpath[250]; - snprintf(txtpath, sizeof(txtpath), "%s%s.txt", Settings.TxtCheatcodespath, id); + int txtLen = snprintf(txtpath, sizeof(txtpath), "%s%s.txt", Settings.TxtCheatcodespath, id); - char codeurl[250]; + char codeurl[80]; snprintf(codeurl, sizeof(codeurl), "https://www.geckocodes.org/txt.php?txt=%s", id); struct download file = {}; downloadfile(codeurl, &file); if (file.size <= 0) { gprintf("Trying backup...\n"); - char codeurl_backup[250]; - snprintf(codeurl_backup, sizeof(codeurl_backup), "https://web.archive.org/web/3000if_/geckocodes.org/txt.php?txt=%s", id); - downloadfile(codeurl_backup, &file); + snprintf(codeurl, sizeof(codeurl), "https://web.archive.org/web/3000if_/geckocodes.org/txt.php?txt=%s", id); + downloadfile(codeurl, &file); } if (file.size > 0) { bool validUrl = false; - if(file.size > 0) + char *textCpy = new (std::nothrow) char[file.size+1]; + if (textCpy) { - char *textCpy = new (std::nothrow) char[file.size+1]; - if(textCpy) - { - memcpy(textCpy, file.data, file.size); - textCpy[file.size] = '\0'; - validUrl = (strcasestr(textCpy, "404 Not Found") == 0); - delete [] textCpy; - } + memcpy(textCpy, file.data, file.size); + textCpy[file.size] = '\0'; + validUrl = (strcasestr(textCpy, "404 Not Found") == 0); + delete [] textCpy; } - if(!validUrl) + if (!validUrl) { - snprintf(codeurl, sizeof(codeurl), "%s%s", codeurl, tr( " is not on the server." )); + snprintf(codeurl, sizeof(codeurl), "%s.txt%s", id, tr( " is not on the server." )); WindowPrompt(tr( "Error" ), codeurl, tr( "OK" )); } else { FILE * pfile = fopen(txtpath, "wb"); - if(pfile) + if (pfile) { fwrite(file.data, 1, file.size, pfile); fclose(pfile); // verify downloaded content - thanks airline38 pfile = fopen(txtpath, "rb"); - if(pfile) + if (pfile) { char target[4]; - fseek(pfile,0,SEEK_SET); + fseek(pfile, 0, SEEK_SET); fread(target, sizeof(char), 4, pfile); fclose(pfile); //printf("target=%s game id=%s\n",target,id); - if (strncmp(target,id,4)== 0 ) + if (strncmp(target, id, 4)== 0 ) { - snprintf(txtpath, sizeof(txtpath), "%s%s", txtpath, tr(" has been Saved. The text has not been verified. Some of the code may not work right with each other. If you experience trouble, open the text in a real text editor for more information." )); + snprintf(txtpath + txtLen, sizeof(txtpath) - txtLen, "%s", tr(" has been Saved. The text has not been verified. Some of the code may not work right with each other. If you experience trouble, open the text in a real text editor for more information." )); WindowPrompt(0, txtpath, tr( "OK" )); ret = 0; } else { RemoveFile(txtpath); - snprintf(codeurl, sizeof(codeurl), "%s%s", codeurl, tr( " is not on the server." )); + snprintf(codeurl, sizeof(codeurl), "%s.txt%s", id, tr( " is not on the server." )); WindowPrompt(tr( "Error" ), codeurl, tr( "OK" )); } } @@ -1529,7 +1525,9 @@ int CodeDownload(const char *id) } else { - snprintf(codeurl, sizeof(codeurl), "%s%s", codeurl, tr(" could not be downloaded.")); + if (file.size > 0) + free(file.data); + snprintf(codeurl, sizeof(codeurl), "%s.txt%s", id, tr(" could not be downloaded.")); WindowPrompt(tr( "Error" ), codeurl, tr( "OK" )); } } diff --git a/source/prompts/filebrowser.cpp b/source/prompts/filebrowser.cpp index 286e03a8..dd4e11ca 100644 --- a/source/prompts/filebrowser.cpp +++ b/source/prompts/filebrowser.cpp @@ -83,8 +83,7 @@ int InitBrowsers() if ( DIR *dir = opendir( rootdir ) ) { closedir(dir); - BROWSERINFO browser; - memset(&browser, 0, sizeof(BROWSERINFO)); + BROWSERINFO browser = {}; strcpy(browser.rootdir, rootdir); ResetBrowser(&browser); browsers.push_back(browser); @@ -445,7 +444,8 @@ int BrowseDevice(char * Path, int Path_size, int Flags, FILTERCASCADE *Filter/*= < MAXPATHLEN) { /* update current directory name */ - sprintf(browser->dir, "%s%s/", browser->dir, browser->browserList[clickedIndex].filename); + strcat(browser->dir, browser->browserList[clickedIndex].filename); + sprintf(browser->dir + strlen(browser->dir), "/"); pathCanged = true; } } diff --git a/source/prompts/gameinfo.cpp b/source/prompts/gameinfo.cpp index 4baf9d70..215e32a4 100644 --- a/source/prompts/gameinfo.cpp +++ b/source/prompts/gameinfo.cpp @@ -677,51 +677,51 @@ static int InternalShowGameInfo(struct discHdr *header) } //date - snprintf(linebuf2, sizeof(linebuf2), " "); + int n = snprintf(linebuf2, sizeof(linebuf2), " "); if (GameInfo.PublishDate != 0) { int year = GameInfo.PublishDate >> 16; int day = GameInfo.PublishDate & 0xFF; int month = (GameInfo.PublishDate >> 8) & 0xFF; - snprintf(linebuf2, sizeof(linebuf2), "%02i ", day); + n += snprintf(linebuf2 + n, sizeof(linebuf2) - n, "%02i ", day); switch (month) { case 1: - snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Jan" )); + snprintf(linebuf2 + n, sizeof(linebuf2) - n, "%s ", tr( "Jan" )); break; case 2: - snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Feb" )); + snprintf(linebuf2 + n, sizeof(linebuf2) - n, "%s ", tr( "Feb" )); break; case 3: - snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Mar" )); + snprintf(linebuf2 + n, sizeof(linebuf2) - n, "%s ", tr( "Mar" )); break; case 4: - snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Apr" )); + snprintf(linebuf2 + n, sizeof(linebuf2) - n, "%s ", tr( "Apr" )); break; case 5: - snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "May" )); + snprintf(linebuf2 + n, sizeof(linebuf2) - n, "%s ", tr( "May" )); break; case 6: - snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "June" )); + snprintf(linebuf2 + n, sizeof(linebuf2) - n, "%s ", tr( "June" )); break; case 7: - snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "July" )); + snprintf(linebuf2 + n, sizeof(linebuf2) - n, "%s ", tr( "July" )); break; case 8: - snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Aug" )); + snprintf(linebuf2 + n, sizeof(linebuf2) - n, "%s ", tr( "Aug" )); break; case 9: - snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Sept" )); + snprintf(linebuf2 + n, sizeof(linebuf2) - n, "%s ", tr( "Sept" )); break; case 10: - snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Oct" )); + snprintf(linebuf2 + n, sizeof(linebuf2) - n, "%s ", tr( "Oct" )); break; case 11: - snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Nov" )); + snprintf(linebuf2 + n, sizeof(linebuf2) - n, "%s ", tr( "Nov" )); break; case 12: - snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Dec" )); + snprintf(linebuf2 + n, sizeof(linebuf2) - n, "%s ", tr( "Dec" )); break; } diff --git a/source/themes/CTheme.cpp b/source/themes/CTheme.cpp index b698bb09..e7561e3a 100644 --- a/source/themes/CTheme.cpp +++ b/source/themes/CTheme.cpp @@ -125,7 +125,7 @@ bool Theme::Load(const char * theme_file_path) char * ptr = strrchr(theme_path, '/'); if(ptr) *ptr = '\0'; - snprintf(theme_path, sizeof(theme_path), "%s/%s", theme_path, Foldername); + snprintf(theme_path + strlen(theme_path), sizeof(theme_path) - strlen(theme_path), "/%s", Foldername); if(!Resources::LoadFiles(theme_path)) { const char * ThemeFilename = strrchr(theme_file_path, '/')+1; @@ -137,7 +137,7 @@ bool Theme::Load(const char * theme_file_path) char * ptr = strrchr(theme_path, '/'); *ptr = 0; - snprintf(theme_path, sizeof(theme_path), "%s/%s", theme_path, Filename); + snprintf(theme_path + strlen(theme_path), sizeof(theme_path) - strlen(theme_path), "/%s", Filename); Resources::LoadFiles(theme_path); } diff --git a/source/usbloader/GameBooter.cpp b/source/usbloader/GameBooter.cpp index 8c316a1c..6d0e504e 100644 --- a/source/usbloader/GameBooter.cpp +++ b/source/usbloader/GameBooter.cpp @@ -642,7 +642,7 @@ int GameBooter::BootDIOSMIOS(struct discHdr *gameHdr) snprintf(disc2Path, sizeof(disc2Path), "%s", RealPath); char *pathPtr = strrchr(disc2Path, '/'); if(pathPtr) *pathPtr = 0; - snprintf(disc2Path, sizeof(disc2Path), "%s/disc2.iso", disc2Path); + snprintf(disc2Path + strlen(disc2Path), sizeof(disc2Path) - strlen(disc2Path), "/disc2.iso"); if(CheckFile(disc2Path)) { int choice = WindowPrompt(gameHdr->title, tr("This game has multiple discs. Please select the disc to launch."), tr("Disc 1"), tr("Disc 2"), tr("Cancel")); @@ -663,7 +663,7 @@ int GameBooter::BootDIOSMIOS(struct discHdr *gameHdr) { char *pathPtr = strrchr(gamePath, '/'); if(pathPtr) *pathPtr = 0; - snprintf(gamePath, sizeof(gamePath), "%s/disc2.iso", gamePath); + snprintf(gamePath + strlen(gamePath), sizeof(gamePath) - strlen(gamePath), "/disc2.iso"); } ExitApp(); @@ -873,7 +873,7 @@ int GameBooter::BootDevolution(struct discHdr *gameHdr) snprintf(disc2, sizeof(disc2), "%s", RealPath); char *pathPtr = strrchr(disc2, '/'); if(pathPtr) *pathPtr = 0; - snprintf(disc2, sizeof(disc2), "%s/disc2.iso", disc2); + snprintf(disc2 + strlen(disc2), sizeof(disc2) - strlen(disc2), "/disc2.iso"); if(CheckFile(disc2)) multiDisc = true; @@ -935,7 +935,7 @@ int GameBooter::BootDevolution(struct discHdr *gameHdr) { if(devoMCEmulation == DEVO_MC_INDIVIDUAL) { - snprintf(DEVO_memCard, sizeof(DEVO_memCard), "%s/memcard_%.6s.bin", DEVO_memCard, (const char *) gameHdr->id); + snprintf(DEVO_memCard + strlen(DEVO_memCard), sizeof(DEVO_memCard) - strlen(DEVO_memCard), "/memcard_%.6s.bin", (const char *) gameHdr->id); } else // same for all games { @@ -1395,7 +1395,7 @@ int GameBooter::BootNintendont(struct discHdr *gameHdr) snprintf(disc2Path, sizeof(disc2Path), "%s", RealPath); char *pathPtr = strrchr(disc2Path, '/'); if(pathPtr) *pathPtr = 0; - snprintf(disc2Path, sizeof(disc2Path), "%s/disc2.iso", disc2Path); + snprintf(disc2Path + strlen(disc2Path), sizeof(disc2Path) - strlen(disc2Path), "/disc2.iso"); if(CheckFile(disc2Path)) { int choice = WindowPrompt(gameHdr->title, tr("This game has multiple discs. Please select the disc to launch."), tr("Disc 1"), tr("Disc 2"), tr("Cancel")); @@ -1415,7 +1415,7 @@ int GameBooter::BootNintendont(struct discHdr *gameHdr) { char *pathPtr = strrchr(gamePath, '/'); if(pathPtr) *pathPtr = 0; - snprintf(gamePath, sizeof(gamePath), "%s/disc2.iso", gamePath); + snprintf(gamePath + strlen(gamePath), sizeof(gamePath) - strlen(gamePath), "/disc2.iso"); } if(gameHdr->type == TYPE_GAME_GC_DISC) diff --git a/source/usbloader/alternatedol.c b/source/usbloader/alternatedol.c index bf8d7d29..0369fe0e 100644 --- a/source/usbloader/alternatedol.c +++ b/source/usbloader/alternatedol.c @@ -25,7 +25,6 @@ typedef struct _dolheader static bool Remove_001_Protection(void *Address, int Size) { u8 SearchPattern[16] = { 0x40, 0x82, 0x00, 0x0C, 0x38, 0x60, 0x00, 0x01, 0x48, 0x00, 0x02, 0x44, 0x38, 0x61, 0x00, 0x18 }; - u8 PatchData[16] = { 0x40, 0x82, 0x00, 0x04, 0x38, 0x60, 0x00, 0x01, 0x48, 0x00, 0x02, 0x44, 0x38, 0x61, 0x00, 0x18 }; void *Addr = Address; void *Addr_end = Address + Size; @@ -34,7 +33,8 @@ static bool Remove_001_Protection(void *Address, int Size) { if (memcmp(Addr, SearchPattern, sizeof(SearchPattern)) == 0) { - memcpy(Addr, PatchData, sizeof(PatchData)); + SearchPattern[3] = 0x04; + memcpy(Addr, SearchPattern, sizeof(SearchPattern)); return true; } Addr += 4; @@ -56,10 +56,7 @@ bool Load_Dol(void **buffer, int* dollen, const char * filepath) file = fopen(fullpath, "rb"); if (file == NULL) - { - fclose(file); return false; - } int filesize; fseek(file, 0, SEEK_END); diff --git a/source/usbloader/neek.cpp b/source/usbloader/neek.cpp index 87ae8d40..9d5d1d91 100644 --- a/source/usbloader/neek.cpp +++ b/source/usbloader/neek.cpp @@ -75,6 +75,7 @@ bool neekLoadKernel (const char* nandpath) kernel = (u32 *) MEM2_alloc(fsize); if(!kernel) { + fclose(f); return false; } diff --git a/source/usbloader/splits.c b/source/usbloader/splits.c index f4ec9e08..63157606 100644 --- a/source/usbloader/splits.c +++ b/source/usbloader/splits.c @@ -174,7 +174,7 @@ s32 split_read_sector(void *_fp, u32 lba, u32 count, void*buf) ret = read(fd, ptr, chunk * 512); if (ret != chunk * 512) { - fprintf(stderr, "error reading %u %u [%u] %u = %u\n", (unsigned int)lba, (unsigned int)count, i, (unsigned int)chunk, ret); + fprintf(stderr, "error reading %u %u [%i] %u = %lu\n", (unsigned int)lba, (unsigned int)count, i, (unsigned int)chunk, (unsigned long)ret); split_error( "error reading disc" ); return 1; } diff --git a/source/usbloader/wbfs/wbfs_fat.cpp b/source/usbloader/wbfs/wbfs_fat.cpp index df830e5c..8fe39e99 100644 --- a/source/usbloader/wbfs/wbfs_fat.cpp +++ b/source/usbloader/wbfs/wbfs_fat.cpp @@ -234,7 +234,7 @@ s32 Wbfs_Fat::RemoveGame(u8 *discid) closedir(dir); // remove game subdir remove(path); - + rmdir(path); return 0; } diff --git a/source/utils/StringTools.c b/source/utils/StringTools.c index 6cc4b72f..add5efea 100644 --- a/source/utils/StringTools.c +++ b/source/utils/StringTools.c @@ -79,6 +79,7 @@ const wchar_t * wfmt(const char * format, ...) if(bt > 0) { strWChar[bt] = 0; + va_end(va); return (const wchar_t *) strWChar; } } diff --git a/source/utils/U8Archive.cpp b/source/utils/U8Archive.cpp index acfe9b22..4281cae5 100644 --- a/source/utils/U8Archive.cpp +++ b/source/utils/U8Archive.cpp @@ -376,9 +376,16 @@ U8NandArchive::~U8NandArchive() bool U8NandArchive::SetFile( const char* nandPath ) { if(fst) + { free(fst); + fst = NULL; + } + if(name_table) + { free(name_table); + name_table = NULL; + } CloseFile(); // open file @@ -438,9 +445,13 @@ bool U8NandArchive::SetFile( const char* nandPath ) dataOffset = 0; free( buffer ); if( fst ) + { free( fst ); + fst = NULL; + } CloseFile(); gprintf( "U8NandArchive: error reading fst\n" ); + return false; } // set name table pointer diff --git a/source/utils/ash.cpp b/source/utils/ash.cpp index 53f099b6..2c5608a6 100644 --- a/source/utils/ash.cpp +++ b/source/utils/ash.cpp @@ -84,7 +84,6 @@ u8* DecompressAsh( const u8 *stuff, u32 &len ) memset( (void*)workingBuffer, 0, 0x100000 ); //printf("r[8] :%08X\n", r[8]); - r[8] = r[8]; r[9] = r[8] + 0x07FE; r[10] = r[9] + 0x07FE; r[11] = r[10] + 0x1FFE; diff --git a/source/wad/wad.cpp b/source/wad/wad.cpp index f725a1c6..f4aa3cd9 100644 --- a/source/wad/wad.cpp +++ b/source/wad/wad.cpp @@ -462,7 +462,9 @@ int Wad::CheckContentMap(const char *installpath, tmd_content *content, char *fi content_map_size++; map = (map_entry_t *) content_map; - sprintf(map[next_entry].name, "%08x", (unsigned int)next_entry); + char name[9]; + sprintf(name, "%08x", (unsigned int)next_entry); + memcpy(map[next_entry].name, name, 8); memcpy(map[next_entry].hash, content->hash, 20); // write new content.map