Also check free space when copying files

This commit is contained in:
d0k3 2016-03-15 22:17:59 +01:00
parent f44472fd0a
commit a89f46b781

View File

@ -204,30 +204,33 @@ bool PathCopyWorker(char* dest, char* orig, bool overwrite) {
if (f_open(&ofile, orig, FA_READ | FA_OPEN_EXISTING) != FR_OK) if (f_open(&ofile, orig, FA_READ | FA_OPEN_EXISTING) != FR_OK)
return false; return false;
fsize = f_size(&ofile);
if (GetFreeSpace(dest) < fsize) {
ShowPrompt(false, "Error: File is too big for destination");
f_close(&ofile);
return false;
}
if (f_open(&dfile, dest, FA_WRITE | FA_CREATE_ALWAYS) != FR_OK) { if (f_open(&dfile, dest, FA_WRITE | FA_CREATE_ALWAYS) != FR_OK) {
f_close(&ofile); f_close(&ofile);
return false; return false;
} }
fsize = f_size(&ofile);
f_lseek(&dfile, 0); f_lseek(&dfile, 0);
f_sync(&dfile); f_sync(&dfile);
f_lseek(&ofile, 0); f_lseek(&ofile, 0);
f_sync(&ofile); f_sync(&ofile);
ret = true; ret = true;
for (size_t pos = 0; pos < fsize; 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); f_read(&ofile, main_buffer, main_buffer_size, &bytes_read);
if (!ShowProgress(pos + (bytes_read / 2), fsize, orig)) { if (!ShowProgress(pos + (bytes_read / 2), fsize, orig))
ret = false; ret = false;
break;
}
f_write(&dfile, main_buffer, bytes_read, &bytes_written); f_write(&dfile, main_buffer, bytes_read, &bytes_written);
if (bytes_read != bytes_written) { if (bytes_read != bytes_written)
ret = false; ret = false;
break;
}
} }
ShowProgress(1, 1, orig); ShowProgress(1, 1, orig);