Savedata: Return result codes from Save/Load.

This doesn't change anything, yet.
This commit is contained in:
Unknown W. Brackets 2018-06-24 13:28:57 -07:00
parent 098a7ffea9
commit aad6377580
3 changed files with 47 additions and 56 deletions

View file

@ -1019,14 +1019,14 @@ void PSPSaveDialog::ExecuteIOAction() {
std::lock_guard<std::mutex> guard(paramLock); std::lock_guard<std::mutex> guard(paramLock);
switch (display) { switch (display) {
case DS_LOAD_LOADING: case DS_LOAD_LOADING:
if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave)) { if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave) == 0) {
display = DS_LOAD_DONE; display = DS_LOAD_DONE;
} else { } else {
display = DS_LOAD_FAILED; display = DS_LOAD_FAILED;
} }
break; break;
case DS_SAVE_SAVING: case DS_SAVE_SAVING:
if (param.Save(param.GetPspParam(), GetSelectedSaveDirName())) { if (param.Save(param.GetPspParam(), GetSelectedSaveDirName()) == 0) {
display = DS_SAVE_DONE; display = DS_SAVE_DONE;
} else { } else {
display = DS_SAVE_FAILED; display = DS_SAVE_FAILED;
@ -1052,87 +1052,81 @@ void PSPSaveDialog::ExecuteIOAction() {
} }
void PSPSaveDialog::ExecuteNotVisibleIOAction() { void PSPSaveDialog::ExecuteNotVisibleIOAction() {
auto &result = param.GetPspParam()->common.result;
switch ((SceUtilitySavedataType)(u32)param.GetPspParam()->mode) { switch ((SceUtilitySavedataType)(u32)param.GetPspParam()->mode) {
case SCE_UTILITY_SAVEDATA_TYPE_LOAD: // Only load and exit case SCE_UTILITY_SAVEDATA_TYPE_LOAD: // Only load and exit
case SCE_UTILITY_SAVEDATA_TYPE_AUTOLOAD: case SCE_UTILITY_SAVEDATA_TYPE_AUTOLOAD:
if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave)) { result = param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave);
param.GetPspParam()->common.result = 0;
} else {
param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_LOAD_NO_DATA;
}
break; break;
case SCE_UTILITY_SAVEDATA_TYPE_SAVE: // Only save and exit case SCE_UTILITY_SAVEDATA_TYPE_SAVE: // Only save and exit
case SCE_UTILITY_SAVEDATA_TYPE_AUTOSAVE: case SCE_UTILITY_SAVEDATA_TYPE_AUTOSAVE:
if (param.Save(param.GetPspParam(), GetSelectedSaveDirName())) { result = param.Save(param.GetPspParam(), GetSelectedSaveDirName());
param.GetPspParam()->common.result = 0;
} else {
param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_SAVE_MS_NOSPACE;
}
break; break;
case SCE_UTILITY_SAVEDATA_TYPE_SIZES: case SCE_UTILITY_SAVEDATA_TYPE_SIZES:
param.GetPspParam()->common.result = param.GetSizes(param.GetPspParam()); result = param.GetSizes(param.GetPspParam());
break; break;
case SCE_UTILITY_SAVEDATA_TYPE_LIST: case SCE_UTILITY_SAVEDATA_TYPE_LIST:
param.GetList(param.GetPspParam()); param.GetList(param.GetPspParam());
param.GetPspParam()->common.result = 0; result = 0;
break; break;
case SCE_UTILITY_SAVEDATA_TYPE_FILES: case SCE_UTILITY_SAVEDATA_TYPE_FILES:
param.GetPspParam()->common.result = param.GetFilesList(param.GetPspParam()); result = param.GetFilesList(param.GetPspParam());
break; break;
case SCE_UTILITY_SAVEDATA_TYPE_GETSIZE: case SCE_UTILITY_SAVEDATA_TYPE_GETSIZE:
{ {
bool result = param.GetSize(param.GetPspParam()); bool sizeResult = param.GetSize(param.GetPspParam());
// TODO: According to JPCSP, should test/verify this part but seems edge casey. // TODO: According to JPCSP, should test/verify this part but seems edge casey.
if (MemoryStick_State() != PSP_MEMORYSTICK_STATE_INSERTED) { if (MemoryStick_State() != PSP_MEMORYSTICK_STATE_INSERTED) {
param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_MEMSTICK; result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_MEMSTICK;
} else if (result) { } else if (sizeResult) {
param.GetPspParam()->common.result = 0; result = 0;
} else { } else {
param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA;
} }
} }
break; break;
case SCE_UTILITY_SAVEDATA_TYPE_DELETEDATA: case SCE_UTILITY_SAVEDATA_TYPE_DELETEDATA:
DEBUG_LOG(SCEUTILITY, "sceUtilitySavedata DELETEDATA: %s", param.GetPspParam()->saveName); DEBUG_LOG(SCEUTILITY, "sceUtilitySavedata DELETEDATA: %s", param.GetPspParam()->saveName);
param.GetPspParam()->common.result = param.DeleteData(param.GetPspParam()); result = param.DeleteData(param.GetPspParam());
break; break;
//case SCE_UTILITY_SAVEDATA_TYPE_AUTODELETE: //case SCE_UTILITY_SAVEDATA_TYPE_AUTODELETE:
case SCE_UTILITY_SAVEDATA_TYPE_SINGLEDELETE: case SCE_UTILITY_SAVEDATA_TYPE_SINGLEDELETE:
if (param.Delete(param.GetPspParam(), param.GetSelectedSave())) { if (param.Delete(param.GetPspParam(), param.GetSelectedSave())) {
param.GetPspParam()->common.result = 0; result = 0;
} else { } else {
param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_DELETE_NO_DATA; result = SCE_UTILITY_SAVEDATA_ERROR_DELETE_NO_DATA;
} }
break; break;
// TODO: Should reset the directory's other files. // TODO: Should reset the directory's other files.
case SCE_UTILITY_SAVEDATA_TYPE_MAKEDATA: case SCE_UTILITY_SAVEDATA_TYPE_MAKEDATA:
case SCE_UTILITY_SAVEDATA_TYPE_MAKEDATASECURE: case SCE_UTILITY_SAVEDATA_TYPE_MAKEDATASECURE:
if (param.Save(param.GetPspParam(), GetSelectedSaveDirName(), param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_MAKEDATASECURE)) { if (param.Save(param.GetPspParam(), GetSelectedSaveDirName(), param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_MAKEDATASECURE) == 0) {
param.GetPspParam()->common.result = 0; result = 0;
} else if (MemoryStick_FreeSpace() == 0) { } else if (MemoryStick_FreeSpace() == 0) {
param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_MEMSTICK_FULL; result = SCE_UTILITY_SAVEDATA_ERROR_RW_MEMSTICK_FULL;
} else { } else {
param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA;
} }
break; break;
case SCE_UTILITY_SAVEDATA_TYPE_WRITEDATA: case SCE_UTILITY_SAVEDATA_TYPE_WRITEDATA:
case SCE_UTILITY_SAVEDATA_TYPE_WRITEDATASECURE: case SCE_UTILITY_SAVEDATA_TYPE_WRITEDATASECURE:
if (param.Save(param.GetPspParam(), GetSelectedSaveDirName(), param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_WRITEDATASECURE)) { if (param.Save(param.GetPspParam(), GetSelectedSaveDirName(), param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_WRITEDATASECURE) == 0) {
param.GetPspParam()->common.result = 0; result = 0;
} else { } else {
param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA;
} }
break; break;
case SCE_UTILITY_SAVEDATA_TYPE_READDATA: case SCE_UTILITY_SAVEDATA_TYPE_READDATA:
case SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE: case SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE:
if (!param.IsSaveDirectoryExist(param.GetPspParam())){ if (!param.IsSaveDirectoryExist(param.GetPspParam())){
param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA;
} else if (!param.IsSfoFileExist(param.GetPspParam())) { } else if (!param.IsSfoFileExist(param.GetPspParam())) {
param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_DATA_BROKEN; result = SCE_UTILITY_SAVEDATA_ERROR_RW_DATA_BROKEN;
} else if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave, param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE)) { } else if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave, param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE) == 0) {
param.GetPspParam()->common.result = 0; result = 0;
} else { } else {
param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_FILE_NOT_FOUND; result = SCE_UTILITY_SAVEDATA_ERROR_RW_FILE_NOT_FOUND;
} }
break; break;
default: default:

View file

@ -358,9 +358,9 @@ int SavedataParam::DeleteData(SceUtilitySavedataParam* param) {
return 0; return 0;
} }
bool SavedataParam::Save(SceUtilitySavedataParam* param, const std::string &saveDirName, bool secureMode) { int SavedataParam::Save(SceUtilitySavedataParam* param, const std::string &saveDirName, bool secureMode) {
if (!param) { if (!param) {
return false; return SCE_UTILITY_SAVEDATA_ERROR_SAVE_MS_NOSPACE;
} }
std::string dirPath = GetSaveFilePath(param, GetSaveDir(param, saveDirName)); std::string dirPath = GetSaveFilePath(param, GetSaveDir(param, saveDirName));
@ -502,11 +502,8 @@ bool SavedataParam::Save(SceUtilitySavedataParam* param, const std::string &save
if (!WritePSPFile(filePath, data_, saveSize)) if (!WritePSPFile(filePath, data_, saveSize))
{ {
ERROR_LOG(SCEUTILITY,"Error writing file %s",filePath.c_str()); ERROR_LOG(SCEUTILITY,"Error writing file %s",filePath.c_str());
if(cryptedData != 0) delete[] cryptedData;
{ return SCE_UTILITY_SAVEDATA_ERROR_SAVE_MS_NOSPACE;
delete[] cryptedData;
}
return false;
} }
delete[] cryptedData; delete[] cryptedData;
} }
@ -538,23 +535,23 @@ bool SavedataParam::Save(SceUtilitySavedataParam* param, const std::string &save
WritePSPFile(snd0path, param->snd0FileData.buf, param->snd0FileData.bufSize); WritePSPFile(snd0path, param->snd0FileData.buf, param->snd0FileData.bufSize);
} }
return true; return 0;
} }
bool SavedataParam::Load(SceUtilitySavedataParam *param, const std::string &saveDirName, int saveId, bool secureMode) int SavedataParam::Load(SceUtilitySavedataParam *param, const std::string &saveDirName, int saveId, bool secureMode) {
{
if (!param) { if (!param) {
return false; return SCE_UTILITY_SAVEDATA_ERROR_LOAD_NO_DATA;
} }
std::string dirPath = GetSaveFilePath(param, GetSaveDir(param, saveDirName)); std::string dirPath = GetSaveFilePath(param, GetSaveDir(param, saveDirName));
std::string filePath = dirPath + "/" + GetFileName(param); std::string filePath = dirPath + "/" + GetFileName(param);
if (!pspFileSystem.GetFileInfo(filePath).exists) { if (!pspFileSystem.GetFileInfo(filePath).exists) {
return false; return SCE_UTILITY_SAVEDATA_ERROR_LOAD_NO_DATA;
} }
if(!LoadSaveData(param, saveDirName, dirPath, secureMode)) // Load main savedata int result = LoadSaveData(param, saveDirName, dirPath, secureMode);
return false; if (result != 0)
return result;
LoadSFO(param, dirPath); // Load sfo LoadSFO(param, dirPath); // Load sfo
@ -572,10 +569,10 @@ bool SavedataParam::Load(SceUtilitySavedataParam *param, const std::string &save
// Load SND0.AT3 // Load SND0.AT3
LoadFile(dirPath, SND0_FILENAME, &param->snd0FileData); LoadFile(dirPath, SND0_FILENAME, &param->snd0FileData);
return true; return 0;
} }
bool SavedataParam::LoadSaveData(SceUtilitySavedataParam *param, const std::string &saveDirName, const std::string& dirPath, bool secureMode) { int SavedataParam::LoadSaveData(SceUtilitySavedataParam *param, const std::string &saveDirName, const std::string &dirPath, bool secureMode) {
if (param->secureVersion != 0) { if (param->secureVersion != 0) {
WARN_LOG_REPORT(SCEUTILITY, "Savedata version requested: %d", param->secureVersion); WARN_LOG_REPORT(SCEUTILITY, "Savedata version requested: %d", param->secureVersion);
} }
@ -587,7 +584,7 @@ bool SavedataParam::LoadSaveData(SceUtilitySavedataParam *param, const std::stri
int saveSize = -1; int saveSize = -1;
if (!ReadPSPFile(filePath, &saveData, saveSize, &readSize)) { if (!ReadPSPFile(filePath, &saveData, saveSize, &readSize)) {
ERROR_LOG(SCEUTILITY,"Error reading file %s",filePath.c_str()); ERROR_LOG(SCEUTILITY,"Error reading file %s",filePath.c_str());
return false; return SCE_UTILITY_SAVEDATA_ERROR_LOAD_NO_DATA;
} }
saveSize = (int)readSize; saveSize = (int)readSize;
@ -606,7 +603,7 @@ bool SavedataParam::LoadSaveData(SceUtilitySavedataParam *param, const std::stri
param->dataSize = (SceSize)saveSize; param->dataSize = (SceSize)saveSize;
delete[] saveData; delete[] saveData;
return true; return 0;
} }
int SavedataParam::DetermineCryptMode(const SceUtilitySavedataParam *param) const { int SavedataParam::DetermineCryptMode(const SceUtilitySavedataParam *param) const {

View file

@ -306,8 +306,8 @@ public:
std::string GetSaveDir(const SceUtilitySavedataParam *param, const std::string &saveDirName) const; std::string GetSaveDir(const SceUtilitySavedataParam *param, const std::string &saveDirName) const;
bool Delete(SceUtilitySavedataParam* param, int saveId = -1); bool Delete(SceUtilitySavedataParam* param, int saveId = -1);
int DeleteData(SceUtilitySavedataParam* param); int DeleteData(SceUtilitySavedataParam* param);
bool Save(SceUtilitySavedataParam* param, const std::string &saveDirName, bool secureMode = true); int Save(SceUtilitySavedataParam* param, const std::string &saveDirName, bool secureMode = true);
bool Load(SceUtilitySavedataParam* param, const std::string &saveDirName, int saveId = -1, bool secureMode = true); int Load(SceUtilitySavedataParam* param, const std::string &saveDirName, int saveId = -1, bool secureMode = true);
int GetSizes(SceUtilitySavedataParam* param); int GetSizes(SceUtilitySavedataParam* param);
bool GetList(SceUtilitySavedataParam* param); bool GetList(SceUtilitySavedataParam* param);
int GetFilesList(SceUtilitySavedataParam* param); int GetFilesList(SceUtilitySavedataParam* param);
@ -354,7 +354,7 @@ private:
void SetFileInfo(SaveFileInfo &saveInfo, PSPFileInfo &info, std::string saveName); void SetFileInfo(SaveFileInfo &saveInfo, PSPFileInfo &info, std::string saveName);
void ClearFileInfo(SaveFileInfo &saveInfo, const std::string &saveName); void ClearFileInfo(SaveFileInfo &saveInfo, const std::string &saveName);
bool LoadSaveData(SceUtilitySavedataParam *param, const std::string &saveDirName, const std::string& dirPath, bool secureMode); int LoadSaveData(SceUtilitySavedataParam *param, const std::string &saveDirName, const std::string& dirPath, bool secureMode);
void LoadCryptedSave(SceUtilitySavedataParam *param, u8 *data, u8 *saveData, int &saveSize, int prevCryptMode, bool &saveDone); void LoadCryptedSave(SceUtilitySavedataParam *param, u8 *data, u8 *saveData, int &saveSize, int prevCryptMode, bool &saveDone);
void LoadNotCryptedSave(SceUtilitySavedataParam *param, u8 *data, u8 *saveData, int &saveSize); void LoadNotCryptedSave(SceUtilitySavedataParam *param, u8 *data, u8 *saveData, int &saveSize);
void LoadSFO(SceUtilitySavedataParam *param, const std::string& dirPath); void LoadSFO(SceUtilitySavedataParam *param, const std::string& dirPath);