Prevented a possible bug when unmounting the SD

This commit is contained in:
d0k3 2016-03-21 23:18:33 +01:00
parent 1501185bdf
commit 50c9091d2c
3 changed files with 18 additions and 6 deletions

View File

@ -39,7 +39,7 @@ bool InitNandFS() {
return true; return true;
} }
void DeinitFS() { void DeinitNandFS() {
for (u32 i = MAX_FS; i > 0; i--) { for (u32 i = MAX_FS; i > 0; i--) {
if (fs_mounted[i]) { if (fs_mounted[i]) {
char fsname[8]; char fsname[8];
@ -50,6 +50,13 @@ void DeinitFS() {
} }
} }
void DeinitSDCardFS() {
if (fs_mounted[0]) {
f_mount(NULL, "0:", 1);
fs_mounted[0] = false;
}
}
int PathToNumFS(const char* path) { int PathToNumFS(const char* path) {
int fsnum = *path - (int) '0'; int fsnum = *path - (int) '0';
if ((fsnum < 0) || (fsnum >= MAX_FS) || (path[1] != ':')) { if ((fsnum < 0) || (fsnum >= MAX_FS) || (path[1] != ':')) {
@ -234,10 +241,12 @@ bool PathCopyWorker(char* dest, char* orig, bool overwrite) {
for (size_t pos = 0; (pos < fsize) && ret; pos += MAIN_BUFFER_SIZE) { for (size_t pos = 0; (pos < fsize) && ret; pos += MAIN_BUFFER_SIZE) {
UINT bytes_read = 0; UINT bytes_read = 0;
UINT bytes_written = 0; UINT bytes_written = 0;
f_read(&ofile, MAIN_BUFFER, MAIN_BUFFER_SIZE, &bytes_read); if (f_read(&ofile, MAIN_BUFFER, MAIN_BUFFER_SIZE, &bytes_read) != FR_OK)
ret = false;
if (!ShowProgress(pos + (bytes_read / 2), fsize, orig)) if (!ShowProgress(pos + (bytes_read / 2), fsize, orig))
ret = false; ret = false;
f_write(&dfile, MAIN_BUFFER, bytes_read, &bytes_written); if (f_write(&dfile, MAIN_BUFFER, bytes_read, &bytes_written) != FR_OK)
ret = false;
if (bytes_read != bytes_written) if (bytes_read != bytes_written)
ret = false; ret = false;
} }

View File

@ -26,7 +26,8 @@ typedef struct {
bool InitSDCardFS(); bool InitSDCardFS();
bool InitNandFS(); bool InitNandFS();
void DeinitFS(); void DeinitNandFS();
void DeinitSDCardFS();
/** Check if writing to this path is allowed **/ /** Check if writing to this path is allowed **/
bool CheckWritePermissions(const char* path); bool CheckWritePermissions(const char* path);

View File

@ -189,7 +189,8 @@ u32 GodMode() {
scroll = 0; scroll = 0;
} }
} else if ((pad_state & BUTTON_B) && (pad_state & BUTTON_R1)) { // unmount SD card } else if ((pad_state & BUTTON_B) && (pad_state & BUTTON_R1)) { // unmount SD card
DeinitFS(); DeinitNandFS();
DeinitSDCardFS();
ShowPrompt(false, "SD card unmounted, you can eject now.\nPut it back in before you press <A>."); ShowPrompt(false, "SD card unmounted, you can eject now.\nPut it back in before you press <A>.");
while (!InitSDCardFS()) { while (!InitSDCardFS()) {
if (!ShowPrompt(true, "Reinitialising SD card failed! Retry?")) if (!ShowPrompt(true, "Reinitialising SD card failed! Retry?"))
@ -336,7 +337,8 @@ u32 GodMode() {
} }
} }
DeinitFS(); DeinitNandFS();
DeinitSDCardFS();
return exit_mode; return exit_mode;
} }