adding option to remove mac specific files
This commit is contained in:
125
source/cpr/cpr.c
125
source/cpr/cpr.c
@@ -15,6 +15,13 @@
|
|||||||
#include "../utils/utils.h"
|
#include "../utils/utils.h"
|
||||||
#include "../fs/fsutils.h"
|
#include "../fs/fsutils.h"
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
// #include <dirent.h>
|
||||||
|
// #include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
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);
|
||||||
@@ -28,6 +35,114 @@ void _RenameFileSimple(char *sourcePath, char *destPath){
|
|||||||
DrawError(newErrCode(res));
|
DrawError(newErrCode(res));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ErrCode_t _FolderDelete(const char *path){
|
||||||
|
int res = 0;
|
||||||
|
ErrCode_t ret = newErrCode(0);
|
||||||
|
u32 x, y;
|
||||||
|
gfx_con_getpos(&x, &y);
|
||||||
|
Vector_t fileVec = ReadFolder(path, &res);
|
||||||
|
if (res){
|
||||||
|
ret = newErrCode(res);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
vecDefArray(FSEntry_t *, fs, fileVec);
|
||||||
|
for (int i = 0; i < fileVec.count && !ret.err; i++){
|
||||||
|
char *temp = CombinePaths(path, fs[i].name);
|
||||||
|
if (fs[i].isDir){
|
||||||
|
ret = _FolderDelete(temp);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
res = f_unlink(temp);
|
||||||
|
if (res){
|
||||||
|
ret = newErrCode(res);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(temp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!ret.err){
|
||||||
|
res = f_unlink(path);
|
||||||
|
if (res)
|
||||||
|
ret = newErrCode(res);
|
||||||
|
}
|
||||||
|
clearFileVector(&fileVec);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
int _StartsWith(const char *a, const char *b)
|
||||||
|
{
|
||||||
|
if(strncmp(a, b, strlen(b)) == 0) return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int listdir(char *path, u32 hos_folder)
|
||||||
|
{
|
||||||
|
FRESULT res;
|
||||||
|
DIR dir;
|
||||||
|
u32 dirLength = 0;
|
||||||
|
static FILINFO fno;
|
||||||
|
|
||||||
|
// 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);
|
||||||
|
// gfx_printf("THING: %s\n", fno.fname);
|
||||||
|
// gfx_printf("Path: %s\n", dir);
|
||||||
|
// Is it a directory?
|
||||||
|
if (fno.fattrib & AM_DIR)
|
||||||
|
{
|
||||||
|
if (
|
||||||
|
strcmp(fno.fname, ".Trash") == 0 ||
|
||||||
|
strcmp(fno.fname, ".Trashes") == 0 ||
|
||||||
|
strcmp(fno.fname, ".DS_Store") == 0 ||
|
||||||
|
strcmp(fno.fname, ".Spotlight-V100") == 0 ||
|
||||||
|
strcmp(fno.fname, ".apDisk") == 0 ||
|
||||||
|
strcmp(fno.fname, ".VolumeIcon.icns") == 0 ||
|
||||||
|
strcmp(fno.fname, ".fseventsd") == 0 ||
|
||||||
|
strcmp(fno.fname, ".TemporaryItems") == 0
|
||||||
|
) {
|
||||||
|
_FolderDelete(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enter the directory.
|
||||||
|
listdir(path, 0);
|
||||||
|
if (res != FR_OK)
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
if (
|
||||||
|
strcmp(fno.fname, ".DS_Store") == 0 ||
|
||||||
|
strcmp(fno.fname, ".Spotlight-V100") == 0 ||
|
||||||
|
strcmp(fno.fname, ".apDisk") == 0 ||
|
||||||
|
strcmp(fno.fname, ".VolumeIcon.icns") == 0 ||
|
||||||
|
strcmp(fno.fname, ".fseventsd") == 0 ||
|
||||||
|
strcmp(fno.fname, ".TemporaryItems") == 0 ||
|
||||||
|
_StartsWith(fno.fname, "._")
|
||||||
|
) {
|
||||||
|
_DeleteFileSimple(path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
f_closedir(&dir);
|
||||||
|
free(path);
|
||||||
|
return 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;
|
||||||
@@ -286,7 +401,15 @@ void m_entry_deleteBootFlags(){
|
|||||||
hidWait();
|
hidWait();
|
||||||
}
|
}
|
||||||
|
|
||||||
void m_entry_fixMacSpecialFolders(char *path){
|
|
||||||
|
|
||||||
|
void m_entry_fixMacSpecialFolders(){
|
||||||
|
gfx_clearscreen();
|
||||||
|
gfx_printf("\n\n-- Fix mac folders (this can take some time, please wait.)\n\n");
|
||||||
|
listdir("/", 0);
|
||||||
|
gfx_printf("\n\rDone, press a key to proceed.");
|
||||||
|
hidWait();
|
||||||
|
|
||||||
// browse path
|
// browse path
|
||||||
// list files & folders
|
// list files & folders
|
||||||
// if file -> delete
|
// if file -> delete
|
||||||
|
|||||||
@@ -37,8 +37,9 @@ enum {
|
|||||||
FixAIOUpdaterBoot,
|
FixAIOUpdaterBoot,
|
||||||
FixArchiveBitA,
|
FixArchiveBitA,
|
||||||
FixArchiveBitN,
|
FixArchiveBitN,
|
||||||
// FixMacSpecialFolders,
|
// FixAll,
|
||||||
FixAll,
|
MainConvenience,
|
||||||
|
FixMacSpecialFolders,
|
||||||
MainOther,
|
MainOther,
|
||||||
MainViewStillNoBootInfo,
|
MainViewStillNoBootInfo,
|
||||||
MainViewCredits,
|
MainViewCredits,
|
||||||
@@ -51,18 +52,28 @@ enum {
|
|||||||
};
|
};
|
||||||
|
|
||||||
MenuEntry_t mainMenuEntries[] = {
|
MenuEntry_t mainMenuEntries[] = {
|
||||||
[MainExplore] = {.optionUnion = COLORTORGB(COLOR_WHITE) | SKIPBIT, .name = "-- Tools --"},
|
[MainExplore] = {.optionUnion = COLORTORGB(COLOR_WHITE) | SKIPBIT, .name = "-- Bootfixes --"},
|
||||||
[DeleteBootFlags] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Disable automatic sysmodule startup"},
|
[DeleteBootFlags] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Disable automatic sysmodule startup"},
|
||||||
[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 except nintendo)"},
|
[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"},
|
// [FixAll] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Try everything"},
|
||||||
[FixAll] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Try everything"},
|
|
||||||
[MainOther] = {.optionUnion = COLORTORGB(COLOR_GREEN) | SKIPBIT, .name = "\n-- Other --"},
|
|
||||||
|
|
||||||
|
[MainConvenience] = {.optionUnion = COLORTORGB(COLOR_WHITE) | SKIPBIT, .name = "\n-- Convenience --"},
|
||||||
|
[FixMacSpecialFolders] = {.optionUnion = COLORTORGB(COLOR_ORANGE), .name = "Remove special folders created by Mac"},
|
||||||
|
|
||||||
|
[MainOther] = {.optionUnion = COLORTORGB(COLOR_WHITE) | SKIPBIT, .name = "\n-- Other --"},
|
||||||
|
[MainViewStillNoBootInfo] = {.optionUnion = COLORTORGB(COLOR_YELLOW), .name = "My switch still does not boot"},
|
||||||
|
[MainViewCredits] = {.optionUnion = COLORTORGB(COLOR_YELLOW), .name = "Credits"},
|
||||||
|
|
||||||
|
[MainExit] = {.optionUnion = COLORTORGB(COLOR_WHITE) | SKIPBIT, .name = "\n-- Exit --"},
|
||||||
|
[MainPowerOff] = {.optionUnion = COLORTORGB(COLOR_VIOLET), .name = "Power off"},
|
||||||
|
[MainRebootRCM] = {.optionUnion = COLORTORGB(COLOR_VIOLET), .name = "Reboot to RCM"},
|
||||||
|
// [MainRebootNormal] = {.optionUnion = COLORTORGB(COLOR_VIOLET), .name = "Reboot normally"},
|
||||||
|
[MainRebootHekate] = {.optionUnion = COLORTORGB(COLOR_VIOLET), .name = "Reboot to bootloader/update.bin"},
|
||||||
|
[MainRebootAMS] = {.optionUnion = COLORTORGB(COLOR_VIOLET), .name = "Reboot to atmosphere/reboot_payload.bin"}
|
||||||
|
|
||||||
|
|
||||||
// [MainBrowseSd] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Browse SD"},
|
// [MainBrowseSd] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Browse SD"},
|
||||||
@@ -73,15 +84,7 @@ MenuEntry_t mainMenuEntries[] = {
|
|||||||
// [MainPartitionSd] = {.optionUnion = COLORTORGB(COLOR_ORANGE), .name = "Partition the sd"},
|
// [MainPartitionSd] = {.optionUnion = COLORTORGB(COLOR_ORANGE), .name = "Partition the sd"},
|
||||||
// [MainDumpFw] = {.optionUnion = COLORTORGB(COLOR_BLUE), .name = "Dump Firmware"},
|
// [MainDumpFw] = {.optionUnion = COLORTORGB(COLOR_BLUE), .name = "Dump Firmware"},
|
||||||
// [MainViewKeys] = {.optionUnion = COLORTORGB(COLOR_YELLOW), .name = "View dumped keys"},
|
// [MainViewKeys] = {.optionUnion = COLORTORGB(COLOR_YELLOW), .name = "View dumped keys"},
|
||||||
[MainOther] = {.optionUnion = COLORTORGB(COLOR_WHITE) | SKIPBIT, .name = "\n-- Other --"},
|
|
||||||
[MainViewStillNoBootInfo] = {.optionUnion = COLORTORGB(COLOR_YELLOW), .name = "My switch still does not boot"},
|
|
||||||
[MainViewCredits] = {.optionUnion = COLORTORGB(COLOR_YELLOW), .name = "Credits"},
|
|
||||||
[MainExit] = {.optionUnion = COLORTORGB(COLOR_WHITE) | SKIPBIT, .name = "\n-- Exit --"},
|
|
||||||
[MainPowerOff] = {.optionUnion = COLORTORGB(COLOR_VIOLET), .name = "Power off"},
|
|
||||||
[MainRebootRCM] = {.optionUnion = COLORTORGB(COLOR_VIOLET), .name = "Reboot to RCM"},
|
|
||||||
// [MainRebootNormal] = {.optionUnion = COLORTORGB(COLOR_VIOLET), .name = "Reboot normally"},
|
|
||||||
[MainRebootHekate] = {.optionUnion = COLORTORGB(COLOR_VIOLET), .name = "Reboot to bootloader/update.bin"},
|
|
||||||
[MainRebootAMS] = {.optionUnion = COLORTORGB(COLOR_VIOLET), .name = "Reboot to atmosphere/reboot_payload.bin"}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void HandleSD(){
|
void HandleSD(){
|
||||||
@@ -132,8 +135,8 @@ menuPaths mainMenuPaths[] = {
|
|||||||
[FixAIOUpdaterBoot] = m_entry_fixAIOUpdate,
|
[FixAIOUpdaterBoot] = m_entry_fixAIOUpdate,
|
||||||
[FixArchiveBitA] = archBitHelperA,
|
[FixArchiveBitA] = archBitHelperA,
|
||||||
[FixArchiveBitN] = archBitHelperN,
|
[FixArchiveBitN] = archBitHelperN,
|
||||||
// [FixMacSpecialFolders] = m_entry_fixMacSpecialFolders,
|
[FixMacSpecialFolders] = m_entry_fixMacSpecialFolders,
|
||||||
[FixAll] = m_entry_fixAll,
|
// [FixAll] = m_entry_fixAll,
|
||||||
[MainViewStillNoBootInfo] = m_entry_stillNoBootInfo,
|
[MainViewStillNoBootInfo] = m_entry_stillNoBootInfo,
|
||||||
[MainRebootHekate] = RebootToHekate,
|
[MainRebootHekate] = RebootToHekate,
|
||||||
[MainRebootRCM] = reboot_rcm,
|
[MainRebootRCM] = reboot_rcm,
|
||||||
|
|||||||
Reference in New Issue
Block a user