Support replacing files in rename
for better compatibility with POSIX (#483)
This commit is contained in:
parent
2a9f86fcbc
commit
1f4669fa4c
@ -980,12 +980,29 @@ archive_rename(struct _reent *r,
|
|||||||
}
|
}
|
||||||
|
|
||||||
rc = FSUSER_RenameFile(sourceDevice->archive, fs_path_old, sourceDevice->archive, fs_path_new);
|
rc = FSUSER_RenameFile(sourceDevice->archive, fs_path_old, sourceDevice->archive, fs_path_new);
|
||||||
if(R_SUCCEEDED(rc))
|
/* if the file at the target destination exists, overwrite it */
|
||||||
return 0;
|
if(R_FAILED(rc) && R_DESCRIPTION(rc) == RD_ALREADY_EXISTS) {
|
||||||
|
rc = FSUSER_DeleteFile(sourceDevice->archive, fs_path_new);
|
||||||
|
if(R_FAILED(rc)) {
|
||||||
|
r->_errno = archive_translate_error(rc);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
rc = FSUSER_RenameFile(sourceDevice->archive, fs_path_old, sourceDevice->archive, fs_path_new);
|
||||||
|
if(R_SUCCEEDED(rc)) return 0;
|
||||||
|
} else if(R_SUCCEEDED(rc)) return 0;
|
||||||
|
|
||||||
rc = FSUSER_RenameDirectory(sourceDevice->archive, fs_path_old, sourceDevice->archive, fs_path_new);
|
rc = FSUSER_RenameDirectory(sourceDevice->archive, fs_path_old, sourceDevice->archive, fs_path_new);
|
||||||
if(R_SUCCEEDED(rc))
|
/* if the directory at the target destination exists, overwrite it */
|
||||||
return 0;
|
if(R_FAILED(rc) && R_DESCRIPTION(rc) == RD_ALREADY_EXISTS) {
|
||||||
|
/* only overwrite empty directories */
|
||||||
|
rc = FSUSER_DeleteDirectory(sourceDevice-> archive, fs_path_new);
|
||||||
|
if(R_FAILED(rc)) {
|
||||||
|
r->_errno = archive_translate_error(rc);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
rc = FSUSER_RenameDirectory(sourceDevice->archive, fs_path_old, sourceDevice->archive, fs_path_new);
|
||||||
|
if(R_SUCCEEDED(rc)) return 0;
|
||||||
|
} else if(R_SUCCEEDED(rc)) return 0;
|
||||||
|
|
||||||
r->_errno = archive_translate_error(rc);
|
r->_errno = archive_translate_error(rc);
|
||||||
return -1;
|
return -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user