mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-12 09:48:37 +12:00
cellSaveData: always commit changes on error in funcFile loop
Make sure the changes which are already done are written.
This commit is contained in:
parent
f841b47b6b
commit
cd843bda6e
1 changed files with 27 additions and 10 deletions
|
@ -1064,9 +1064,9 @@ static NEVER_INLINE error_code savedata_op(ppu_thread& ppu, u32 operation, u32 v
|
||||||
// Clear order info
|
// Clear order info
|
||||||
blist.clear();
|
blist.clear();
|
||||||
|
|
||||||
// Set to not load files
|
// Set to not load files on next step
|
||||||
has_modified = true;
|
|
||||||
recreated = true;
|
recreated = true;
|
||||||
|
has_modified = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1106,14 +1106,16 @@ static NEVER_INLINE error_code savedata_op(ppu_thread& ppu, u32 operation, u32 v
|
||||||
fileGet->excSize = 0;
|
fileGet->excSize = 0;
|
||||||
memset(fileGet->reserved, 0, sizeof(fileGet->reserved));
|
memset(fileGet->reserved, 0, sizeof(fileGet->reserved));
|
||||||
|
|
||||||
|
error_code savedata_result = CELL_OK;
|
||||||
|
|
||||||
while (funcFile)
|
while (funcFile)
|
||||||
{
|
{
|
||||||
funcFile(ppu, result, fileGet, fileSet);
|
funcFile(ppu, result, fileGet, fileSet);
|
||||||
|
|
||||||
if (result->result < 0)
|
if (result->result < 0)
|
||||||
{
|
{
|
||||||
cellSaveData.warning("savedata_op(): funcFile returned result=%d.", result->result);
|
savedata_result = {CELL_SAVEDATA_ERROR_CBRESULT, +result->result};
|
||||||
return CELL_SAVEDATA_ERROR_CBRESULT;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result->result == CELL_SAVEDATA_CBRESULT_OK_LAST || result->result == CELL_SAVEDATA_CBRESULT_OK_LAST_NOCONFIRM)
|
if (result->result == CELL_SAVEDATA_CBRESULT_OK_LAST || result->result == CELL_SAVEDATA_CBRESULT_OK_LAST_NOCONFIRM)
|
||||||
|
@ -1175,10 +1177,16 @@ static NEVER_INLINE error_code savedata_op(ppu_thread& ppu, u32 operation, u32 v
|
||||||
{
|
{
|
||||||
// ****** sysutil savedata parameter error : 61 ******
|
// ****** sysutil savedata parameter error : 61 ******
|
||||||
cellSaveData.error("savedata_op(): unknown fileSet->fileType (0x%x)", type);
|
cellSaveData.error("savedata_op(): unknown fileSet->fileType (0x%x)", type);
|
||||||
return {CELL_SAVEDATA_ERROR_PARAM, "61"};
|
savedata_result = {CELL_SAVEDATA_ERROR_PARAM, "61"};
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (savedata_result)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
psf.emplace("*" + file_path, fileSet->fileType == CELL_SAVEDATA_FILETYPE_SECUREFILE);
|
psf.emplace("*" + file_path, fileSet->fileType == CELL_SAVEDATA_FILETYPE_SECUREFILE);
|
||||||
|
|
||||||
const u32 access_size = std::min<u32>(fileSet->fileSize, fileSet->fileBufSize);
|
const u32 access_size = std::min<u32>(fileSet->fileSize, fileSet->fileBufSize);
|
||||||
|
@ -1212,19 +1220,22 @@ static NEVER_INLINE error_code savedata_op(ppu_thread& ppu, u32 operation, u32 v
|
||||||
{
|
{
|
||||||
// ****** sysutil savedata parameter error : 22 ******
|
// ****** sysutil savedata parameter error : 22 ******
|
||||||
cellSaveData.error("Failed to open file %s%s", dir_path, file_path);
|
cellSaveData.error("Failed to open file %s%s", dir_path, file_path);
|
||||||
return {CELL_SAVEDATA_ERROR_PARAM, "22"};
|
savedata_result = {CELL_SAVEDATA_ERROR_PARAM, "22"};
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fileSet->fileBufSize < fileSet->fileSize)
|
if (fileSet->fileBufSize < fileSet->fileSize)
|
||||||
{
|
{
|
||||||
// ****** sysutil savedata parameter error : 72 ******
|
// ****** sysutil savedata parameter error : 72 ******
|
||||||
return {CELL_SAVEDATA_ERROR_PARAM, "72"};
|
savedata_result = {CELL_SAVEDATA_ERROR_PARAM, "72"};
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fileSet->fileBuf)
|
if (!fileSet->fileBuf)
|
||||||
{
|
{
|
||||||
// ****** sysutil savedata parameter error : 73 ******
|
// ****** sysutil savedata parameter error : 73 ******
|
||||||
return {CELL_SAVEDATA_ERROR_PARAM, "73"};
|
savedata_result = {CELL_SAVEDATA_ERROR_PARAM, "73"};
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read from memory file to vm
|
// Read from memory file to vm
|
||||||
|
@ -1289,9 +1300,15 @@ static NEVER_INLINE error_code savedata_op(ppu_thread& ppu, u32 operation, u32 v
|
||||||
{
|
{
|
||||||
// ****** sysutil savedata parameter error : 60 ******
|
// ****** sysutil savedata parameter error : 60 ******
|
||||||
cellSaveData.error("savedata_op(): unknown fileSet->fileOperation (0x%x)", op);
|
cellSaveData.error("savedata_op(): unknown fileSet->fileOperation (0x%x)", op);
|
||||||
return {CELL_SAVEDATA_ERROR_PARAM, "60"};
|
savedata_result = {CELL_SAVEDATA_ERROR_PARAM, "60"};
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (savedata_result)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write PARAM.SFO and savedata
|
// Write PARAM.SFO and savedata
|
||||||
|
@ -1352,7 +1369,7 @@ static NEVER_INLINE error_code savedata_op(ppu_thread& ppu, u32 operation, u32 v
|
||||||
fs::remove_all(old_path);
|
fs::remove_all(old_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
return CELL_OK;
|
return savedata_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static NEVER_INLINE error_code savedata_get_list_item(vm::cptr<char> dirName, vm::ptr<CellSaveDataDirStat> dir, vm::ptr<CellSaveDataSystemFileParam> sysFileParam, vm::ptr<u32> bind, vm::ptr<u32> sizeKB, u32 userId)
|
static NEVER_INLINE error_code savedata_get_list_item(vm::cptr<char> dirName, vm::ptr<CellSaveDataDirStat> dir, vm::ptr<CellSaveDataSystemFileParam> sysFileParam, vm::ptr<u32> bind, vm::ptr<u32> sizeKB, u32 userId)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue