mirror of
https://gitlab.com/Theopse/fbi-i18n-zh.git
synced 2025-04-06 03:58:02 +08:00
Attempt to fix overwriting files when pasting.
This commit is contained in:
parent
f0119190b4
commit
352fc5389a
@ -80,29 +80,26 @@ static void action_paste_files_update(ui_view* view, void* data, float* progress
|
|||||||
} else {
|
} else {
|
||||||
Handle srcFileHandle;
|
Handle srcFileHandle;
|
||||||
if(R_SUCCEEDED(res = FSUSER_OpenFile(&srcFileHandle, *srcArchive, srcFsPath, FS_OPEN_READ, 0))) {
|
if(R_SUCCEEDED(res = FSUSER_OpenFile(&srcFileHandle, *srcArchive, srcFsPath, FS_OPEN_READ, 0))) {
|
||||||
u64 size = 0;
|
Handle dstFileHandle;
|
||||||
if(R_SUCCEEDED(res = FSFILE_GetSize(srcFileHandle, &size)) && R_SUCCEEDED(res = FSUSER_CreateFile(*dstArchive, dstFsPath, 0, size))) {
|
if(R_SUCCEEDED(res = FSUSER_OpenFile(&dstFileHandle, *dstArchive, dstFsPath, FS_OPEN_WRITE | FS_OPEN_CREATE, 0))) {
|
||||||
Handle dstFileHandle;
|
u32 bytesRead = 0;
|
||||||
if(R_SUCCEEDED(res = FSUSER_OpenFile(&dstFileHandle, *dstArchive, dstFsPath, FS_OPEN_WRITE, 0))) {
|
u32 offset = 0;
|
||||||
u32 bytesRead = 0;
|
u8* buffer = (u8*) calloc(1, 1024 * 512);
|
||||||
u32 offset = 0;
|
while(R_SUCCEEDED(FSFILE_Read(srcFileHandle, &bytesRead, offset, buffer, 1024 * 512)) && bytesRead > 0) {
|
||||||
u8* buffer = (u8*) calloc(1, 1024 * 512);
|
u32 bytesWritten = 0;
|
||||||
while(R_SUCCEEDED(FSFILE_Read(srcFileHandle, &bytesRead, offset, buffer, 1024 * 512)) && bytesRead > 0) {
|
if(R_FAILED(res = FSFILE_Write(dstFileHandle, &bytesWritten, offset, buffer, bytesRead, 0))) {
|
||||||
u32 bytesWritten = 0;
|
break;
|
||||||
if(R_FAILED(res = FSFILE_Write(dstFileHandle, &bytesWritten, offset, buffer, bytesRead, 0))) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
offset += bytesWritten;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
free(buffer);
|
offset += bytesWritten;
|
||||||
|
}
|
||||||
|
|
||||||
FSFILE_Close(dstFileHandle);
|
free(buffer);
|
||||||
|
|
||||||
if(R_SUCCEEDED(res) && dstArchive->id == ARCHIVE_USER_SAVEDATA) {
|
FSFILE_Close(dstFileHandle);
|
||||||
res = FSUSER_ControlArchive(*dstArchive, ARCHIVE_ACTION_COMMIT_SAVE_DATA, NULL, 0, NULL, 0);
|
|
||||||
}
|
if(R_SUCCEEDED(res) && dstArchive->id == ARCHIVE_USER_SAVEDATA) {
|
||||||
|
res = FSUSER_ControlArchive(*dstArchive, ARCHIVE_ACTION_COMMIT_SAVE_DATA, NULL, 0, NULL, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user