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;
|
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.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave, param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE)) {
|
if (!param.IsSaveDirectoryExist(param.GetPspParam())){
|
||||||
param.GetPspParam()->common.result = 0;
|
param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA;
|
||||||
} else if (param.secureCanSkip(param.GetPspParam(),param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE)) {
|
} else if (!param.IsSfoFileExist(param.GetPspParam())) {
|
||||||
// TODO: This makes loading/saving work in some games but also confuses them. Must be wrong in some way.
|
param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_DATA_BROKEN;
|
||||||
INFO_LOG(SCEUTILITY,"Has not been saved yet, just skip.");
|
} else if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave, param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE)) {
|
||||||
param.GetPspParam()->common.result = 0;
|
param.GetPspParam()->common.result = 0;
|
||||||
} else {
|
} 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;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -33,8 +33,10 @@
|
||||||
#define SCE_UTILITY_SAVEDATA_ERROR_LOAD_INTERNAL (0x8011030b)
|
#define SCE_UTILITY_SAVEDATA_ERROR_LOAD_INTERNAL (0x8011030b)
|
||||||
|
|
||||||
#define SCE_UTILITY_SAVEDATA_ERROR_RW_NO_MEMSTICK (0x80110321)
|
#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_NO_DATA (0x80110327)
|
||||||
#define SCE_UTILITY_SAVEDATA_ERROR_RW_BAD_PARAMS (0x80110328)
|
#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_RW_BAD_STATUS (0x8011032c)
|
||||||
|
|
||||||
#define SCE_UTILITY_SAVEDATA_ERROR_SAVE_NO_MS (0x80110381)
|
#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.
|
// We need PARAMS.SFO's SAVEDATA_FILE_LIST to determine which entries are secure.
|
||||||
PSPFileInfo sfoFileInfo = pspFileSystem.GetFileInfo(dirPath + "/" + SFO_FILENAME);
|
PSPFileInfo sfoFileInfo = pspFileSystem.GetFileInfo(dirPath + "/" + SFO_FILENAME);
|
||||||
std::set<std::string> secureFilenames;
|
std::set<std::string> secureFilenames;
|
||||||
// TODO: Error code if not?
|
|
||||||
if (sfoFileInfo.exists) {
|
if (sfoFileInfo.exists) {
|
||||||
secureFilenames = getSecureFileNames(dirPath);
|
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.
|
// 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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SavedataParam::secureCanSkip(SceUtilitySavedataParam* param, bool secureMode) {
|
bool SavedataParam::IsSaveDirectoryExist(SceUtilitySavedataParam* param) {
|
||||||
if (!secureMode) // Only check in secure mode.
|
std::string dirPath = savePath + GetGameName(param) + GetSaveName(param);
|
||||||
return false;
|
PSPFileInfo directoryInfo = pspFileSystem.GetFileInfo(dirPath);
|
||||||
|
return directoryInfo.exists;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SavedataParam::IsSfoFileExist(SceUtilitySavedataParam* param) {
|
||||||
std::string dirPath = savePath + GetGameName(param) + GetSaveName(param);
|
std::string dirPath = savePath + GetGameName(param) + GetSaveName(param);
|
||||||
std::string sfoPath = dirPath + "/" + SFO_FILENAME;
|
std::string sfoPath = dirPath + "/" + SFO_FILENAME;
|
||||||
std::string secureFileName = GetFileName(param);
|
|
||||||
std::set<std::string> secureFileNames;
|
|
||||||
PSPFileInfo sfoInfo = pspFileSystem.GetFileInfo(sfoPath);
|
PSPFileInfo sfoInfo = pspFileSystem.GetFileInfo(sfoPath);
|
||||||
// If sfo doesn't exist,shouldn't skip.
|
return sfoInfo.exists;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -314,7 +314,8 @@ public:
|
||||||
bool GetSize(SceUtilitySavedataParam* param);
|
bool GetSize(SceUtilitySavedataParam* param);
|
||||||
int GetSaveCryptMode(SceUtilitySavedataParam* param, const std::string &saveDirName);
|
int GetSaveCryptMode(SceUtilitySavedataParam* param, const std::string &saveDirName);
|
||||||
bool IsInSaveDataList(std::string saveName, int count);
|
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 GetGameName(const SceUtilitySavedataParam *param) const;
|
||||||
std::string GetSaveName(const SceUtilitySavedataParam *param) const;
|
std::string GetSaveName(const SceUtilitySavedataParam *param) const;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue