savedata
This commit is contained in:
parent
c2a462ceb2
commit
70fac3a65e
4 changed files with 24 additions and 28 deletions
|
@ -1108,14 +1108,14 @@ void PSPSaveDialog::ExecuteNotVisibleIOAction() {
|
|||
break;
|
||||
case SCE_UTILITY_SAVEDATA_TYPE_READDATA:
|
||||
case SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE:
|
||||
if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave, param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE)) {
|
||||
param.GetPspParam()->common.result = 0;
|
||||
} else if (param.secureCanSkip(param.GetPspParam(),param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE)) {
|
||||
// TODO: This makes loading/saving work in some games but also confuses them. Must be wrong in some way.
|
||||
INFO_LOG(SCEUTILITY,"Has not been saved yet, just skip.");
|
||||
if (!param.IsSaveDirectoryExist(param.GetPspParam())){
|
||||
param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA;
|
||||
} else if (!param.IsSfoFileExist(param.GetPspParam())) {
|
||||
param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_DATA_BROKEN;
|
||||
} else if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave, param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE)) {
|
||||
param.GetPspParam()->common.result = 0;
|
||||
} else {
|
||||
param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; // not sure if correct code
|
||||
param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_FILE_NOT_FOUND;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -33,8 +33,10 @@
|
|||
#define SCE_UTILITY_SAVEDATA_ERROR_LOAD_INTERNAL (0x8011030b)
|
||||
|
||||
#define SCE_UTILITY_SAVEDATA_ERROR_RW_NO_MEMSTICK (0x80110321)
|
||||
#define SCE_UTILITY_SAVEDATA_ERROR_RW_DATA_BROKEN (0x80110326)
|
||||
#define SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA (0x80110327)
|
||||
#define SCE_UTILITY_SAVEDATA_ERROR_RW_BAD_PARAMS (0x80110328)
|
||||
#define SCE_UTILITY_SAVEDATA_ERROR_RW_FILE_NOT_FOUND (0x80110329)
|
||||
#define SCE_UTILITY_SAVEDATA_ERROR_RW_BAD_STATUS (0x8011032c)
|
||||
|
||||
#define SCE_UTILITY_SAVEDATA_ERROR_SAVE_NO_MS (0x80110381)
|
||||
|
|
|
@ -1106,9 +1106,11 @@ int SavedataParam::GetFilesList(SceUtilitySavedataParam *param)
|
|||
// We need PARAMS.SFO's SAVEDATA_FILE_LIST to determine which entries are secure.
|
||||
PSPFileInfo sfoFileInfo = pspFileSystem.GetFileInfo(dirPath + "/" + SFO_FILENAME);
|
||||
std::set<std::string> secureFilenames;
|
||||
// TODO: Error code if not?
|
||||
|
||||
if (sfoFileInfo.exists) {
|
||||
secureFilenames = getSecureFileNames(dirPath);
|
||||
} else {
|
||||
return SCE_UTILITY_SAVEDATA_ERROR_RW_DATA_BROKEN;
|
||||
}
|
||||
|
||||
// Does not list directories, nor recurse into them, and ignores files not ALL UPPERCASE.
|
||||
|
@ -1657,24 +1659,15 @@ bool SavedataParam::IsInSaveDataList(std::string saveName, int count) {
|
|||
return false;
|
||||
}
|
||||
|
||||
bool SavedataParam::secureCanSkip(SceUtilitySavedataParam* param, bool secureMode) {
|
||||
if (!secureMode) // Only check in secure mode.
|
||||
return false;
|
||||
bool SavedataParam::IsSaveDirectoryExist(SceUtilitySavedataParam* param) {
|
||||
std::string dirPath = savePath + GetGameName(param) + GetSaveName(param);
|
||||
PSPFileInfo directoryInfo = pspFileSystem.GetFileInfo(dirPath);
|
||||
return directoryInfo.exists;
|
||||
}
|
||||
|
||||
bool SavedataParam::IsSfoFileExist(SceUtilitySavedataParam* param) {
|
||||
std::string dirPath = savePath + GetGameName(param) + GetSaveName(param);
|
||||
std::string sfoPath = dirPath + "/" + SFO_FILENAME;
|
||||
std::string secureFileName = GetFileName(param);
|
||||
std::set<std::string> secureFileNames;
|
||||
PSPFileInfo sfoInfo = pspFileSystem.GetFileInfo(sfoPath);
|
||||
// If sfo doesn't exist,shouldn't skip.
|
||||
if (!sfoInfo.exists)
|
||||
return false;
|
||||
|
||||
// Get secure file names from PARAM.SFO.
|
||||
secureFileNames = getSecureFileNames(dirPath);
|
||||
// Secure file name should be saved in PARAM.SFO
|
||||
// Cannot find name in PARAM.SFO, could skip.
|
||||
if (secureFileNames.find(secureFileName) == secureFileNames.end())
|
||||
return true;
|
||||
|
||||
return false;
|
||||
return sfoInfo.exists;
|
||||
}
|
||||
|
|
|
@ -314,7 +314,8 @@ public:
|
|||
bool GetSize(SceUtilitySavedataParam* param);
|
||||
int GetSaveCryptMode(SceUtilitySavedataParam* param, const std::string &saveDirName);
|
||||
bool IsInSaveDataList(std::string saveName, int count);
|
||||
bool secureCanSkip(SceUtilitySavedataParam* param, bool secureMode);
|
||||
bool IsSaveDirectoryExist(SceUtilitySavedataParam* param);
|
||||
bool IsSfoFileExist(SceUtilitySavedataParam* param);
|
||||
|
||||
std::string GetGameName(const SceUtilitySavedataParam *param) const;
|
||||
std::string GetSaveName(const SceUtilitySavedataParam *param) const;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue