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);
|
||||
if(R_SUCCEEDED(rc))
|
||||
return 0;
|
||||
/* if the file at the target destination exists, overwrite it */
|
||||
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);
|
||||
if(R_SUCCEEDED(rc))
|
||||
return 0;
|
||||
/* if the directory at the target destination exists, overwrite it */
|
||||
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);
|
||||
return -1;
|
||||
|
Loading…
Reference in New Issue
Block a user