forked from Mirror/GodMode9
Improved SD format dialogue
This commit is contained in:
parent
0d5638c3a6
commit
29d8ac186f
@ -11,8 +11,8 @@
|
||||
#include "ff.h"
|
||||
#include "ui.h"
|
||||
|
||||
#define SKIP_CUR (1UL<<3)
|
||||
#define OVERWRITE_CUR (1UL<<4)
|
||||
#define SKIP_CUR (1UL<<4)
|
||||
#define OVERWRITE_CUR (1UL<<5)
|
||||
|
||||
// Volume2Partition resolution table
|
||||
PARTITION VolToPart[] = {
|
||||
@ -57,7 +57,8 @@ bool FormatSDCard(u64 hidden_mb, u32 cluster_size, const char* label) {
|
||||
else memset(mbr + 0x1CE, 0, 0x10);
|
||||
|
||||
// one last warning....
|
||||
if (!ShowUnlockSequence(6, "!WARNING!\n \nProceeding will format this SD.\nThis will irreversibly delete\nALL data on it."))
|
||||
// 0:/Nintendo 3DS/ write permission is ignored here, this warning is enough
|
||||
if (!ShowUnlockSequence(5, "!WARNING!\n \nProceeding will format this SD.\nThis will irreversibly delete\nALL data on it."))
|
||||
return false;
|
||||
ShowString("Formatting SD, please wait...");
|
||||
|
||||
@ -258,7 +259,7 @@ bool FileInjectFile(const char* dest, const char* orig, u32 offset) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool PathCopyVrtToVrt(const char* destdir, const char* orig) {
|
||||
bool PathCopyVrtToVrt(const char* destdir, const char* orig, u32* flags) {
|
||||
VirtualFile dvfile;
|
||||
VirtualFile ovfile;
|
||||
bool ret = true;
|
||||
@ -287,7 +288,8 @@ bool PathCopyVrtToVrt(const char* destdir, const char* orig) {
|
||||
dvfile.keyslot = ovfile.keyslot = 0xFF; // this improves copy times for virtual NAND
|
||||
|
||||
// check write permissions
|
||||
if (!CheckWritePermissions(dest)) return false;
|
||||
if ((!flags || !(*flags & OVERRIDE_PERM)) && !CheckWritePermissions(destdir))
|
||||
return false;
|
||||
|
||||
// unmount critical NAND drives
|
||||
DismountDriveType(DriveType(destdir)&(DRV_SYSNAND|DRV_EMUNAND|DRV_IMAGE));
|
||||
@ -307,7 +309,7 @@ bool PathCopyVrtToVrt(const char* destdir, const char* orig) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool PathCopyFatToVrt(const char* destdir, const char* orig) {
|
||||
bool PathCopyFatToVrt(const char* destdir, const char* orig, u32* flags) {
|
||||
VirtualFile dvfile;
|
||||
FIL ofile;
|
||||
bool ret = true;
|
||||
@ -354,7 +356,8 @@ bool PathCopyFatToVrt(const char* destdir, const char* orig) {
|
||||
}
|
||||
|
||||
// check write permissions
|
||||
if (!CheckWritePermissions(dest)) return false;
|
||||
if ((!flags || !(*flags & OVERRIDE_PERM)) && !CheckWritePermissions(destdir))
|
||||
return false;
|
||||
|
||||
// FAT file
|
||||
if ((fx_open(&ofile, orig, FA_READ | FA_OPEN_EXISTING) != FR_OK) &&
|
||||
@ -441,6 +444,7 @@ bool PathCopyVrtToFat(char* dest, char* orig, u32* flags) {
|
||||
// check destination write permission (special paths only)
|
||||
if (((*dest == '1') || (strncmp(dest, "0:/Nintendo 3DS", 16) == 0)) &&
|
||||
(!flags || (*flags & (OVERWRITE_CUR|OVERWRITE_ALL))) &&
|
||||
(!flags || !(*flags & OVERRIDE_PERM)) &&
|
||||
!CheckWritePermissions(dest)) return false;
|
||||
|
||||
// the copy process takes place here
|
||||
@ -577,6 +581,7 @@ bool PathCopyWorker(char* dest, char* orig, u32* flags, bool move) {
|
||||
// check destination write permission (special paths only)
|
||||
if (((*dest == '1') || (strncmp(dest, "0:/Nintendo 3DS", 16) == 0)) &&
|
||||
(!flags || (*flags & (OVERWRITE_CUR|OVERWRITE_ALL))) &&
|
||||
(!flags || !(*flags & OVERRIDE_PERM)) &&
|
||||
!CheckWritePermissions(dest)) return false;
|
||||
|
||||
// the copy process takes place here
|
||||
@ -675,7 +680,8 @@ bool PathCopyWorker(char* dest, char* orig, u32* flags, bool move) {
|
||||
}
|
||||
|
||||
bool PathCopy(const char* destdir, const char* orig, u32* flags) {
|
||||
if (!CheckWritePermissions(destdir)) return false;
|
||||
if ((!flags || !(*flags & OVERRIDE_PERM)) && !CheckWritePermissions(destdir))
|
||||
return false;
|
||||
if (flags) *flags = *flags & ~(SKIP_CUR|OVERWRITE_CUR); // reset local flags
|
||||
int ddrvtype = DriveType(destdir);
|
||||
int odrvtype = DriveType(orig);
|
||||
@ -692,13 +698,15 @@ bool PathCopy(const char* destdir, const char* orig, u32* flags) {
|
||||
ShowPrompt(false, "Copy operation is not allowed");
|
||||
return false; // prevent illegal operations
|
||||
}
|
||||
return PathCopyFatToVrt(destdir, orig);
|
||||
} else return PathCopyVrtToVrt(destdir, orig); // virtual to virtual
|
||||
return PathCopyFatToVrt(destdir, orig, flags);
|
||||
} else return PathCopyVrtToVrt(destdir, orig, flags); // virtual to virtual
|
||||
}
|
||||
|
||||
bool PathMove(const char* destdir, const char* orig, u32* flags) {
|
||||
if (!flags || !(*flags & OVERRIDE_PERM)) {
|
||||
if (!CheckWritePermissions(destdir)) return false;
|
||||
if (!CheckDirWritePermissions(orig)) return false; // check orig FULL DIR permissions
|
||||
if (!CheckDirWritePermissions(orig)) return false;
|
||||
}
|
||||
if (flags) *flags = *flags & ~(SKIP_CUR|OVERWRITE_CUR); // reset local flags
|
||||
// moving only for regular FAT drives (= not alias drives)
|
||||
if (!(DriveType(destdir) & DriveType(orig) & DRV_STDFAT)) {
|
||||
|
@ -7,9 +7,10 @@
|
||||
// #include "fsperm.h"
|
||||
|
||||
// move / copy flags
|
||||
#define ASK_ALL (1UL<<0)
|
||||
#define SKIP_ALL (1UL<<1)
|
||||
#define OVERWRITE_ALL (1UL<<2)
|
||||
#define OVERRIDE_PERM (1UL<<0)
|
||||
#define ASK_ALL (1UL<<1)
|
||||
#define SKIP_ALL (1UL<<2)
|
||||
#define OVERWRITE_ALL (1UL<<3)
|
||||
|
||||
/** Return total size of SD card **/
|
||||
uint64_t GetSDCardSize();
|
||||
|
@ -250,7 +250,8 @@ u32 SdFormatMenu(void) {
|
||||
return 0;
|
||||
InitSDCardFS(); // this has to be initialized for EmuNAND to work
|
||||
if ((nand.size / (1024*1024) <= emunand_size_mb) && ShowPrompt(true, "Clone SysNAND to RedNAND now?")) {
|
||||
if (!PathCopy("E:", "S:/nand_minsize.bin", NULL))
|
||||
u32 flags = OVERRIDE_PERM;
|
||||
if (!PathCopy("E:", "S:/nand_minsize.bin", &flags))
|
||||
ShowPrompt(false, "Cloning SysNAND to EmuNAND: failed!");
|
||||
}
|
||||
DeinitSDCardFS();
|
||||
|
Loading…
x
Reference in New Issue
Block a user