put everything into a new CPR file

This commit is contained in:
Calvin Fuchs
2021-06-24 19:20:34 +02:00
parent 6335181e52
commit 5463aa2306
4 changed files with 605 additions and 262 deletions

View File

@@ -11,7 +11,7 @@ include $(DEVKITARM)/base_rules
IPL_LOAD_ADDR := 0x40003000 IPL_LOAD_ADDR := 0x40003000
LPVERSION_MAJOR := 0 LPVERSION_MAJOR := 0
LPVERSION_MINOR := 3 LPVERSION_MINOR := 3
LPVERSION_BUGFX := 1 LPVERSION_BUGFX := 2
################################################################################ ################################################################################

329
source/cpr/cpr.c Normal file
View File

@@ -0,0 +1,329 @@
// #include <utils/util.h>
// #include "tools.h"
#include <storage/nx_sd.h>
#include "../fs/readers/folderReader.h"
#include "../fs/fstypes.h"
#include "../fs/fscopy.h"
#include <utils/sprintf.h>
#include <stdlib.h>
#include <string.h>
#include "../gfx/gfx.h"
#include "../gfx/gfxutils.h"
#include "../gfx/menu.h"
#include "../hid/hid.h"
// #include "utils.h"
#include "../utils/utils.h"
#include "../fs/fsutils.h"
void _DeleteFileSimple(char *thing){
//char *thing = CombinePaths(path, entry.name);
int res = f_unlink(thing);
if (res)
DrawError(newErrCode(res));
free(thing);
}
void _RenameFileSimple(char *sourcePath, char *destPath){
int res = f_rename(sourcePath, destPath);
if (res){
DrawError(newErrCode(res));
}
}
int _fix_attributes(char *path, u32 *total, u32 hos_folder, u32 check_first_run){
FRESULT res;
DIR dir;
u32 dirLength = 0;
static FILINFO fno;
if (check_first_run)
{
// Read file attributes.
res = f_stat(path, &fno);
if (res != FR_OK)
return res;
// Check if archive bit is set.
if (fno.fattrib & AM_ARC)
{
*(u32 *)total = *(u32 *)total + 1;
f_chmod(path, 0, AM_ARC);
}
}
// Open directory.
res = f_opendir(&dir, path);
if (res != FR_OK)
return res;
dirLength = strlen(path);
for (;;)
{
// Clear file or folder path.
path[dirLength] = 0;
// Read a directory item.
res = f_readdir(&dir, &fno);
// Break on error or end of dir.
if (res != FR_OK || fno.fname[0] == 0)
break;
// Skip official Nintendo dir if started from root.
if (!hos_folder && !strcmp(fno.fname, "Nintendo"))
continue;
// Set new directory or file.
memcpy(&path[dirLength], "/", 1);
memcpy(&path[dirLength + 1], fno.fname, strlen(fno.fname) + 1);
// Check if archive bit is set.
if (fno.fattrib & AM_ARC)
{
*total = *total + 1;
f_chmod(path, 0, AM_ARC);
}
// Is it a directory?
if (fno.fattrib & AM_DIR)
{
// Set archive bit to NCA folders.
if (hos_folder && !strcmp(fno.fname + strlen(fno.fname) - 4, ".nca"))
{
*total = *total + 1;
f_chmod(path, AM_ARC, AM_ARC);
}
// Enter the directory.
res = _fix_attributes(path, total, hos_folder, 0);
if (res != FR_OK)
break;
}
}
f_closedir(&dir);
return res;
}
void m_entry_fixArchiveBit(u32 type){
gfx_clearscreen();
gfx_printf("\n\n-- Fix Archive Bits\n\n");
char path[256];
char label[16];
u32 total = 0;
if (sd_mount())
{
switch (type)
{
case 0:
strcpy(path, "/");
strcpy(label, "SD Card");
break;
case 1:
default:
strcpy(path, "/Nintendo");
strcpy(label, "Nintendo folder");
break;
}
gfx_printf("Traversing all %s files!\nThis may take some time...\n\n", label);
_fix_attributes(path, &total, type, type);
gfx_printf("%kTotal archive bits cleared: %d!%k", 0xFF96FF00, total, 0xFFCCCCCC);
gfx_printf("\n\n Done, press a key to proceed.");
hidWait();
}
}
void m_entry_fixAIOUpdate(){
gfx_clearscreen();
gfx_printf("\n\n-- Fix broken Switch-AiO-Updater update.\n\n");
char *aio_fs_path = CpyStr("sd:/atmosphere/fusee-secondary.bin.aio");
char *aio_p_path = CpyStr("sd:/sept/payload.bin.aio");
char *aio_strt_path = CpyStr("sd:/atmosphere/stratosphere.romfs.aio");
char *o_fs_path = CpyStr("sd:/atmosphere/fusee-secondary.bin");
char *o_p_path = CpyStr("sd:/sept/payload.bin");
char *o_strt_path = CpyStr("sd:/atmosphere/stratosphere.romfs");
if (FileExists(aio_fs_path)) {
gfx_printf("Detected aio updated fusee-secondary file -> replacing original\n\n");
if (FileExists(o_fs_path)) {
_DeleteFileSimple(o_fs_path);
}
_RenameFileSimple(aio_fs_path, o_fs_path);
}
free(aio_fs_path);
free(o_fs_path);
if (FileExists(aio_p_path)) {
gfx_printf("Detected aio updated paload file -> replacing original\n\n");
if (FileExists(o_p_path)) {
_DeleteFileSimple(o_p_path);
}
_RenameFileSimple(aio_p_path, o_p_path);
}
free(aio_p_path);
free(o_p_path);
if (FileExists(aio_strt_path)) {
gfx_printf("Detected aio updated stratosphere file -> replacing original\n\n");
if (FileExists(o_strt_path)) {
_DeleteFileSimple(o_strt_path);
}
_RenameFileSimple(aio_strt_path, o_strt_path);
}
free(aio_strt_path);
free(o_strt_path);
gfx_printf("\n\n Done, press a key to proceed.");
hidWait();
}
void m_entry_fixClingWrap(){
gfx_clearscreen();
gfx_printf("\n\n-- Fixing ClingWrap.\n\n");
char *bpath = CpyStr("sd:/_b0otloader");
char *bopath = CpyStr("sd:/bootloader");
char *kpath = CpyStr("sd:/atmosphere/_k1ps");
char *kopath = CpyStr("sd:/atmosphere/kips");
char *ppath = CpyStr("sd:/bootloader/_patchesCW.ini");
char *popath = CpyStr("sd:/atmosphere/patches.ini");
if (FileExists(bpath)) {
if (FileExists(bopath)) {
FolderDelete(bopath);
}
int res = f_rename(bpath, bopath);
if (res){
DrawError(newErrCode(res));
}
gfx_printf("-- Fixed Bootloader\n");
}
if (FileExists(kpath)) {
if (FileExists(kopath)) {
FolderDelete(kopath);
}
int res = f_rename(kpath, kopath);
if (res){
DrawError(newErrCode(res));
}
gfx_printf("-- Fixed kips\n");
}
if (FileExists(ppath)) {
if (FileExists(popath)) {
_DeleteFileSimple(popath);
}
_RenameFileSimple(ppath,popath);
gfx_printf("-- Fixed patches.ini\n");
}
free(bpath);
free(bopath);
free(kpath);
free(kopath);
free(ppath);
free(popath);
gfx_printf("\n\n Done, press a key to proceed.");
hidWait();
}
void _deleteTheme(char* basePath, char* folderId){
char *path = CombinePaths(basePath, folderId);
if (FileExists(path)) {
gfx_printf("-- Theme found: %s\n", path);
FolderDelete(path);
}
free(path);
}
void m_entry_deleteInstalledThemes(){
gfx_clearscreen();
gfx_printf("\n\n-- Deleting installed themes.\n\n");
_deleteTheme("sd:/atmosphere/contents", "0100000000001000");
_deleteTheme("sd:/atmosphere/contents", "0100000000001007");
_deleteTheme("sd:/atmosphere/contents", "0100000000001013");
gfx_printf("\n\n Done, press a key to proceed.");
hidWait();
}
void m_entry_deleteBootFlags(){
gfx_clearscreen();
gfx_printf("\n\n-- Disabling automatic sysmodule startup.\n\n");
char *storedPath = CpyStr("sd:/atmosphere/contents");
int readRes = 0;
Vector_t fileVec = ReadFolder(storedPath, &readRes);
if (readRes){
clearFileVector(&fileVec);
DrawError(newErrCode(readRes));
} else {
vecDefArray(FSEntry_t*, fsEntries, fileVec);
for (int i = 0; i < fileVec.count; i++){
char *suf = "/flags/boot2.flag";
char *flagPath = CombinePaths(storedPath, fsEntries[i].name);
flagPath = CombinePaths(flagPath, suf);
if (FileExists(flagPath)) {
gfx_printf("Deleting: %s\n", flagPath);
_DeleteFileSimple(flagPath);
}
free(flagPath);
}
}
gfx_printf("\n\n Done, press a key to proceed.");
hidWait();
}
void m_entry_fixMacSpecialFolders(char *path){
// browse path
// list files & folders
// if file -> delete
// if folder !== nintendo
// if folder m_entry_fixMacSpecialFolders with new path
}
void m_entry_stillNoBootInfo(){
gfx_clearscreen();
gfx_printf("\n\n-- My switch still does not boot.\n\n");
gfx_printf("%kDo you have a gamecard inserted?\n", COLOR_WHITE);
gfx_printf("Try taking it out and reboot.\n\n");
gfx_printf("%kDid you recently update Atmosphere/DeepSea?\n", COLOR_WHITE);
gfx_printf("Insert your sdcard into a computer, delete 'atmosphere', 'bootloader' & 'sept', download your preffered CFW and put the files back on your switch.\n\n");
gfx_printf("%kDid you just buy a new SD-card?\n", COLOR_WHITE);
gfx_printf("Make sure its not a fake card.\n\n");
gfx_printf("\n\n Done, press a key to proceed.");
hidWait();
}
void m_entry_ViewCredits(){
gfx_clearscreen();
gfx_printf("\nCommon Problem Resolver v%d.%d.%d\nBy Team Neptune\n\nBased on TegraExplorer by SuchMemeManySkill,\nLockpick_RCM & Hekate, from shchmue & CTCaer\n\n\n", LP_VER_MJ, LP_VER_MN, LP_VER_BF);
hidWait();
}
void m_entry_fixAll(){
gfx_clearscreen();
m_entry_deleteBootFlags();
m_entry_deleteInstalledThemes();
m_entry_fixClingWrap();
m_entry_fixAIOUpdate();
m_entry_stillNoBootInfo();
}

12
source/cpr/cpr.h Normal file
View File

@@ -0,0 +1,12 @@
#pragma once
#include <utils/util.h>
void m_entry_fixArchiveBit(u32 type);
void m_entry_fixAIOUpdate();
void m_entry_fixClingWrap();
void m_entry_deleteInstalledThemes();
void m_entry_deleteBootFlags();
void m_entry_ViewCredits();
void m_entry_fixAll();
void m_entry_stillNoBootInfo();
void m_entry_fixMacSpecialFolders();

View File

@@ -25,6 +25,8 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "../cpr/cpr.h"
extern hekate_config h_cfg; extern hekate_config h_cfg;
enum { enum {
@@ -54,7 +56,7 @@ MenuEntry_t mainMenuEntries[] = {
[DeleteThemes] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Delete installed themes"}, [DeleteThemes] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Delete installed themes"},
[FixClingWrap] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Fix ClingWrap"}, [FixClingWrap] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Fix ClingWrap"},
[FixAIOUpdaterBoot] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Fix Switch-AiO-Updater update"}, [FixAIOUpdaterBoot] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Fix Switch-AiO-Updater update"},
[FixArchiveBitA] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Fix archive bit (all folders)"}, [FixArchiveBitA] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Fix archive bit (all folders except nintendo)"},
[FixArchiveBitN] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Fix archive bit (nintendo folder)"}, [FixArchiveBitN] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Fix archive bit (nintendo folder)"},
// [FixMacSpecialFolders] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Remove special folders created by Mac"}, // [FixMacSpecialFolders] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Remove special folders created by Mac"},
[FixAll] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Try everything"}, [FixAll] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Try everything"},
@@ -100,318 +102,318 @@ extern int launch_payload(char *path);
/////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////
void _DeleteFileSimple(char *thing){ // void _DeleteFileSimple(char *thing){
//char *thing = CombinePaths(path, entry.name); // //char *thing = CombinePaths(path, entry.name);
int res = f_unlink(thing); // int res = f_unlink(thing);
if (res) // if (res)
DrawError(newErrCode(res)); // DrawError(newErrCode(res));
free(thing); // free(thing);
} // }
void _RenameFileSimple(char *sourcePath, char *destPath){ // void _RenameFileSimple(char *sourcePath, char *destPath){
int res = f_rename(sourcePath, destPath); // int res = f_rename(sourcePath, destPath);
if (res){ // if (res){
DrawError(newErrCode(res)); // DrawError(newErrCode(res));
} // }
} // }
int _fix_attributes(char *path, u32 *total, u32 hos_folder, u32 check_first_run){ // int _fix_attributes(char *path, u32 *total, u32 hos_folder, u32 check_first_run){
FRESULT res; // FRESULT res;
DIR dir; // DIR dir;
u32 dirLength = 0; // u32 dirLength = 0;
static FILINFO fno; // static FILINFO fno;
if (check_first_run) // if (check_first_run)
{ // {
// Read file attributes. // // Read file attributes.
res = f_stat(path, &fno); // res = f_stat(path, &fno);
if (res != FR_OK) // if (res != FR_OK)
return res; // return res;
// Check if archive bit is set. // // Check if archive bit is set.
if (fno.fattrib & AM_ARC) // if (fno.fattrib & AM_ARC)
{ // {
*(u32 *)total = *(u32 *)total + 1; // *(u32 *)total = *(u32 *)total + 1;
f_chmod(path, 0, AM_ARC); // f_chmod(path, 0, AM_ARC);
} // }
} // }
// Open directory. // // Open directory.
res = f_opendir(&dir, path); // res = f_opendir(&dir, path);
if (res != FR_OK) // if (res != FR_OK)
return res; // return res;
dirLength = strlen(path); // dirLength = strlen(path);
for (;;) // for (;;)
{ // {
// Clear file or folder path. // // Clear file or folder path.
path[dirLength] = 0; // path[dirLength] = 0;
// Read a directory item. // // Read a directory item.
res = f_readdir(&dir, &fno); // res = f_readdir(&dir, &fno);
// Break on error or end of dir. // // Break on error or end of dir.
if (res != FR_OK || fno.fname[0] == 0) // if (res != FR_OK || fno.fname[0] == 0)
break; // break;
// Skip official Nintendo dir if started from root. // // Skip official Nintendo dir if started from root.
if (!hos_folder && !strcmp(fno.fname, "Nintendo")) // if (!hos_folder && !strcmp(fno.fname, "Nintendo"))
continue; // continue;
// Set new directory or file. // // Set new directory or file.
memcpy(&path[dirLength], "/", 1); // memcpy(&path[dirLength], "/", 1);
memcpy(&path[dirLength + 1], fno.fname, strlen(fno.fname) + 1); // memcpy(&path[dirLength + 1], fno.fname, strlen(fno.fname) + 1);
// Check if archive bit is set. // // Check if archive bit is set.
if (fno.fattrib & AM_ARC) // if (fno.fattrib & AM_ARC)
{ // {
*total = *total + 1; // *total = *total + 1;
f_chmod(path, 0, AM_ARC); // f_chmod(path, 0, AM_ARC);
} // }
// Is it a directory? // // Is it a directory?
if (fno.fattrib & AM_DIR) // if (fno.fattrib & AM_DIR)
{ // {
// Set archive bit to NCA folders. // // Set archive bit to NCA folders.
if (hos_folder && !strcmp(fno.fname + strlen(fno.fname) - 4, ".nca")) // if (hos_folder && !strcmp(fno.fname + strlen(fno.fname) - 4, ".nca"))
{ // {
*total = *total + 1; // *total = *total + 1;
f_chmod(path, AM_ARC, AM_ARC); // f_chmod(path, AM_ARC, AM_ARC);
} // }
// Enter the directory. // // Enter the directory.
res = _fix_attributes(path, total, hos_folder, 0); // res = _fix_attributes(path, total, hos_folder, 0);
if (res != FR_OK) // if (res != FR_OK)
break; // break;
} // }
} // }
f_closedir(&dir); // f_closedir(&dir);
return res; // return res;
} // }
void m_entry_fixArchiveBit(u32 type){ // void m_entry_fixArchiveBit(u32 type){
gfx_clearscreen(); // gfx_clearscreen();
gfx_printf("\n\n-- Fix Archive Bits\n\n"); // gfx_printf("\n\n-- Fix Archive Bits\n\n");
char path[256]; // char path[256];
char label[16]; // char label[16];
u32 total = 0; // u32 total = 0;
if (sd_mount()) // if (sd_mount())
{ // {
switch (type) // switch (type)
{ // {
case 0: // case 0:
strcpy(path, "/"); // strcpy(path, "/");
strcpy(label, "SD Card"); // strcpy(label, "SD Card");
break; // break;
case 1: // case 1:
default: // default:
strcpy(path, "/Nintendo"); // strcpy(path, "/Nintendo");
strcpy(label, "Nintendo folder"); // strcpy(label, "Nintendo folder");
break; // break;
} // }
gfx_printf("Traversing all %s files!\nThis may take some time...\n\n", label); // gfx_printf("Traversing all %s files!\nThis may take some time...\n\n", label);
_fix_attributes(path, &total, type, type); // _fix_attributes(path, &total, type, type);
gfx_printf("%kTotal archive bits cleared: %d!%k", 0xFF96FF00, total, 0xFFCCCCCC); // gfx_printf("%kTotal archive bits cleared: %d!%k", 0xFF96FF00, total, 0xFFCCCCCC);
gfx_printf("\n\n Done, press a key to proceed."); // gfx_printf("\n\n Done, press a key to proceed.");
hidWait(); // hidWait();
} // }
} // }
void m_entry_fixAIOUpdate(){ // void m_entry_fixAIOUpdate(){
gfx_clearscreen(); // gfx_clearscreen();
gfx_printf("\n\n-- Fix broken Switch-AiO-Updater update.\n\n"); // gfx_printf("\n\n-- Fix broken Switch-AiO-Updater update.\n\n");
char *aio_fs_path = CpyStr("sd:/atmosphere/fusee-secondary.bin.aio"); // char *aio_fs_path = CpyStr("sd:/atmosphere/fusee-secondary.bin.aio");
char *aio_p_path = CpyStr("sd:/sept/payload.bin.aio"); // char *aio_p_path = CpyStr("sd:/sept/payload.bin.aio");
char *aio_strt_path = CpyStr("sd:/atmosphere/stratosphere.romfs.aio"); // char *aio_strt_path = CpyStr("sd:/atmosphere/stratosphere.romfs.aio");
char *o_fs_path = CpyStr("sd:/atmosphere/fusee-secondary.bin"); // char *o_fs_path = CpyStr("sd:/atmosphere/fusee-secondary.bin");
char *o_p_path = CpyStr("sd:/sept/payload.bin"); // char *o_p_path = CpyStr("sd:/sept/payload.bin");
char *o_strt_path = CpyStr("sd:/atmosphere/stratosphere.romfs"); // char *o_strt_path = CpyStr("sd:/atmosphere/stratosphere.romfs");
if (FileExists(aio_fs_path)) { // if (FileExists(aio_fs_path)) {
gfx_printf("Detected aio updated fusee-secondary file -> replacing original\n\n"); // gfx_printf("Detected aio updated fusee-secondary file -> replacing original\n\n");
if (FileExists(o_fs_path)) { // if (FileExists(o_fs_path)) {
_DeleteFileSimple(o_fs_path); // _DeleteFileSimple(o_fs_path);
} // }
_RenameFileSimple(aio_fs_path, o_fs_path); // _RenameFileSimple(aio_fs_path, o_fs_path);
} // }
free(aio_fs_path); // free(aio_fs_path);
free(o_fs_path); // free(o_fs_path);
if (FileExists(aio_p_path)) { // if (FileExists(aio_p_path)) {
gfx_printf("Detected aio updated paload file -> replacing original\n\n"); // gfx_printf("Detected aio updated paload file -> replacing original\n\n");
if (FileExists(o_p_path)) { // if (FileExists(o_p_path)) {
_DeleteFileSimple(o_p_path); // _DeleteFileSimple(o_p_path);
} // }
_RenameFileSimple(aio_p_path, o_p_path); // _RenameFileSimple(aio_p_path, o_p_path);
} // }
free(aio_p_path); // free(aio_p_path);
free(o_p_path); // free(o_p_path);
if (FileExists(aio_strt_path)) { // if (FileExists(aio_strt_path)) {
gfx_printf("Detected aio updated stratosphere file -> replacing original\n\n"); // gfx_printf("Detected aio updated stratosphere file -> replacing original\n\n");
if (FileExists(o_strt_path)) { // if (FileExists(o_strt_path)) {
_DeleteFileSimple(o_strt_path); // _DeleteFileSimple(o_strt_path);
} // }
_RenameFileSimple(aio_strt_path, o_strt_path); // _RenameFileSimple(aio_strt_path, o_strt_path);
} // }
free(aio_strt_path); // free(aio_strt_path);
free(o_strt_path); // free(o_strt_path);
gfx_printf("\n\n Done, press a key to proceed."); // gfx_printf("\n\n Done, press a key to proceed.");
hidWait(); // hidWait();
} // }
void m_entry_fixClingWrap(){ // void m_entry_fixClingWrap(){
gfx_clearscreen(); // gfx_clearscreen();
gfx_printf("\n\n-- Fixing ClingWrap.\n\n"); // gfx_printf("\n\n-- Fixing ClingWrap.\n\n");
char *bpath = CpyStr("sd:/_b0otloader"); // char *bpath = CpyStr("sd:/_b0otloader");
char *bopath = CpyStr("sd:/bootloader"); // char *bopath = CpyStr("sd:/bootloader");
char *kpath = CpyStr("sd:/atmosphere/_k1ps"); // char *kpath = CpyStr("sd:/atmosphere/_k1ps");
char *kopath = CpyStr("sd:/atmosphere/kips"); // char *kopath = CpyStr("sd:/atmosphere/kips");
char *ppath = CpyStr("sd:/bootloader/_patchesCW.ini"); // char *ppath = CpyStr("sd:/bootloader/_patchesCW.ini");
char *popath = CpyStr("sd:/atmosphere/patches.ini"); // char *popath = CpyStr("sd:/atmosphere/patches.ini");
if (FileExists(bpath)) { // if (FileExists(bpath)) {
if (FileExists(bopath)) { // if (FileExists(bopath)) {
FolderDelete(bopath); // FolderDelete(bopath);
} // }
int res = f_rename(bpath, bopath); // int res = f_rename(bpath, bopath);
if (res){ // if (res){
DrawError(newErrCode(res)); // DrawError(newErrCode(res));
} // }
gfx_printf("-- Fixed Bootloader\n"); // gfx_printf("-- Fixed Bootloader\n");
} // }
if (FileExists(kpath)) { // if (FileExists(kpath)) {
if (FileExists(kopath)) { // if (FileExists(kopath)) {
FolderDelete(kopath); // FolderDelete(kopath);
} // }
int res = f_rename(kpath, kopath); // int res = f_rename(kpath, kopath);
if (res){ // if (res){
DrawError(newErrCode(res)); // DrawError(newErrCode(res));
} // }
gfx_printf("-- Fixed kips\n"); // gfx_printf("-- Fixed kips\n");
} // }
if (FileExists(ppath)) { // if (FileExists(ppath)) {
if (FileExists(popath)) { // if (FileExists(popath)) {
_DeleteFileSimple(popath); // _DeleteFileSimple(popath);
} // }
_RenameFileSimple(ppath,popath); // _RenameFileSimple(ppath,popath);
gfx_printf("-- Fixed patches.ini\n"); // gfx_printf("-- Fixed patches.ini\n");
} // }
free(bpath); // free(bpath);
free(bopath); // free(bopath);
free(kpath); // free(kpath);
free(kopath); // free(kopath);
free(ppath); // free(ppath);
free(popath); // free(popath);
gfx_printf("\n\n Done, press a key to proceed."); // gfx_printf("\n\n Done, press a key to proceed.");
hidWait(); // hidWait();
} // }
void _deleteTheme(char* basePath, char* folderId){ // void _deleteTheme(char* basePath, char* folderId){
char *path = CombinePaths(basePath, folderId); // char *path = CombinePaths(basePath, folderId);
if (FileExists(path)) { // if (FileExists(path)) {
gfx_printf("-- Theme found: %s\n", path); // gfx_printf("-- Theme found: %s\n", path);
FolderDelete(path); // FolderDelete(path);
} // }
free(path); // free(path);
} // }
void m_entry_deleteInstalledThemes(){ // void m_entry_deleteInstalledThemes(){
gfx_clearscreen(); // gfx_clearscreen();
gfx_printf("\n\n-- Deleting installed themes.\n\n"); // gfx_printf("\n\n-- Deleting installed themes.\n\n");
_deleteTheme("sd:/atmosphere/contents", "0100000000001000"); // _deleteTheme("sd:/atmosphere/contents", "0100000000001000");
_deleteTheme("sd:/atmosphere/contents", "0100000000001007"); // _deleteTheme("sd:/atmosphere/contents", "0100000000001007");
_deleteTheme("sd:/atmosphere/contents", "0100000000001013"); // _deleteTheme("sd:/atmosphere/contents", "0100000000001013");
gfx_printf("\n\n Done, press a key to proceed."); // gfx_printf("\n\n Done, press a key to proceed.");
hidWait(); // hidWait();
} // }
void m_entry_deleteBootFlags(){ // void m_entry_deleteBootFlags(){
gfx_clearscreen(); // gfx_clearscreen();
gfx_printf("\n\n-- Disabling automatic sysmodule startup.\n\n"); // gfx_printf("\n\n-- Disabling automatic sysmodule startup.\n\n");
char *storedPath = CpyStr("sd:/atmosphere/contents"); // char *storedPath = CpyStr("sd:/atmosphere/contents");
int readRes = 0; // int readRes = 0;
Vector_t fileVec = ReadFolder(storedPath, &readRes); // Vector_t fileVec = ReadFolder(storedPath, &readRes);
if (readRes){ // if (readRes){
clearFileVector(&fileVec); // clearFileVector(&fileVec);
DrawError(newErrCode(readRes)); // DrawError(newErrCode(readRes));
} else { // } else {
vecDefArray(FSEntry_t*, fsEntries, fileVec); // vecDefArray(FSEntry_t*, fsEntries, fileVec);
for (int i = 0; i < fileVec.count; i++){ // for (int i = 0; i < fileVec.count; i++){
char *suf = "/flags/boot2.flag"; // char *suf = "/flags/boot2.flag";
char *flagPath = CombinePaths(storedPath, fsEntries[i].name); // char *flagPath = CombinePaths(storedPath, fsEntries[i].name);
flagPath = CombinePaths(flagPath, suf); // flagPath = CombinePaths(flagPath, suf);
if (FileExists(flagPath)) { // if (FileExists(flagPath)) {
gfx_printf("Deleting: %s\n", flagPath); // gfx_printf("Deleting: %s\n", flagPath);
_DeleteFileSimple(flagPath); // _DeleteFileSimple(flagPath);
} // }
free(flagPath); // free(flagPath);
} // }
} // }
gfx_printf("\n\n Done, press a key to proceed."); // gfx_printf("\n\n Done, press a key to proceed.");
hidWait(); // hidWait();
} // }
void m_entry_fixMacSpecialFolders(char *path){ // void m_entry_fixMacSpecialFolders(char *path){
// browse path // // browse path
// list files & folders // // list files & folders
// if file -> delete // // if file -> delete
// if folder !== nintendo // // if folder !== nintendo
// if folder m_entry_fixMacSpecialFolders with new path // // if folder m_entry_fixMacSpecialFolders with new path
} // }
void m_entry_stillNoBootInfo(){ // void m_entry_stillNoBootInfo(){
gfx_clearscreen(); // gfx_clearscreen();
gfx_printf("\n\n-- My switch still does not boot.\n\n"); // gfx_printf("\n\n-- My switch still does not boot.\n\n");
gfx_printf("%kDo you have a gamecard inserted?\n", COLOR_WHITE); // gfx_printf("%kDo you have a gamecard inserted?\n", COLOR_WHITE);
gfx_printf("Try taking it out and reboot.\n\n"); // gfx_printf("Try taking it out and reboot.\n\n");
gfx_printf("%kDid you recently update Atmosphere/DeepSea?\n", COLOR_WHITE); // gfx_printf("%kDid you recently update Atmosphere/DeepSea?\n", COLOR_WHITE);
gfx_printf("Insert your sdcard into a computer, delete 'atmosphere', 'bootloader' & 'sept', download your preffered CFW and put the files back on your switch.\n\n"); // gfx_printf("Insert your sdcard into a computer, delete 'atmosphere', 'bootloader' & 'sept', download your preffered CFW and put the files back on your switch.\n\n");
gfx_printf("%kDid you just buy a new SD-card?\n", COLOR_WHITE); // gfx_printf("%kDid you just buy a new SD-card?\n", COLOR_WHITE);
gfx_printf("Make sure its not a fake card.\n\n"); // gfx_printf("Make sure its not a fake card.\n\n");
gfx_printf("\n\n Done, press a key to proceed."); // gfx_printf("\n\n Done, press a key to proceed.");
hidWait(); // hidWait();
} // }
void m_entry_ViewCredits(){ // void m_entry_ViewCredits(){
gfx_clearscreen(); // gfx_clearscreen();
gfx_printf("\nCommon Problem Resolver v%d.%d.%d\nBy Team Neptune\n\nBased on TegraExplorer by SuchMemeManySkill,\nLockpick_RCM & Hekate, from shchmue & CTCaer\n\n\n", LP_VER_MJ, LP_VER_MN, LP_VER_BF); // gfx_printf("\nCommon Problem Resolver v%d.%d.%d\nBy Team Neptune\n\nBased on TegraExplorer by SuchMemeManySkill,\nLockpick_RCM & Hekate, from shchmue & CTCaer\n\n\n", LP_VER_MJ, LP_VER_MN, LP_VER_BF);
hidWait(); // hidWait();
} // }
void m_entry_fixAll(){ // void m_entry_fixAll(){
gfx_clearscreen(); // gfx_clearscreen();
m_entry_deleteBootFlags(); // m_entry_deleteBootFlags();
m_entry_deleteInstalledThemes(); // m_entry_deleteInstalledThemes();
m_entry_fixClingWrap(); // m_entry_fixClingWrap();
m_entry_fixAIOUpdate(); // m_entry_fixAIOUpdate();
m_entry_stillNoBootInfo(); // m_entry_stillNoBootInfo();
} // }
/////////////////////////////////////////// ///////////////////////////////////////////