Skip to content

Commit

Permalink
Merge pull request #18430 from Kethen/writedata
Browse files Browse the repository at this point in the history
Handle SCE_UTILITY_SAVEDATA_TYPE_SAVE then SCE_UTILITY_SAVEDATA_TYPE_WRITEDATA
  • Loading branch information
hrydgard committed Nov 27, 2023
2 parents 04c6b1a + 652498e commit d58f826
Showing 1 changed file with 12 additions and 7 deletions.
19 changes: 12 additions & 7 deletions Core/Dialog/SavedataParam.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -496,13 +496,18 @@ int SavedataParam::Save(SceUtilitySavedataParam* param, const std::string &saveD
std::string sfopath = dirPath + "/" + SFO_FILENAME;
std::shared_ptr<ParamSFOData> sfoFile = LoadCachedSFO(sfopath, true);

bool subWrite = param->mode == SCE_UTILITY_SAVEDATA_TYPE_WRITEDATASECURE || param->mode == SCE_UTILITY_SAVEDATA_TYPE_WRITEDATA;
bool wasCrypted = GetSaveCryptMode(param, saveDirName) != 0;

// Update values
sfoFile->SetValue("TITLE", param->sfoParam.title, 128);
sfoFile->SetValue("SAVEDATA_TITLE", param->sfoParam.savedataTitle, 128);
sfoFile->SetValue("SAVEDATA_DETAIL", param->sfoParam.detail, 1024);
sfoFile->SetValue("PARENTAL_LEVEL", param->sfoParam.parentalLevel, 4);
sfoFile->SetValue("CATEGORY", "MS", 4);
sfoFile->SetValue("SAVEDATA_DIRECTORY", GetSaveDir(param, saveDirName), 64);
if(!subWrite){
sfoFile->SetValue("TITLE", param->sfoParam.title, 128);
sfoFile->SetValue("SAVEDATA_TITLE", param->sfoParam.savedataTitle, 128);
sfoFile->SetValue("SAVEDATA_DETAIL", param->sfoParam.detail, 1024);
sfoFile->SetValue("PARENTAL_LEVEL", param->sfoParam.parentalLevel, 4);
sfoFile->SetValue("CATEGORY", "MS", 4);
sfoFile->SetValue("SAVEDATA_DIRECTORY", GetSaveDir(param, saveDirName), 64);
}

// Always write and update the file list.
// For each file, 13 bytes for filename, 16 bytes for file hash (0 in PPSSPP), 3 byte for padding
Expand Down Expand Up @@ -542,7 +547,7 @@ int SavedataParam::Save(SceUtilitySavedataParam* param, const std::string &saveD
sfoFile->WriteSFO(&sfoData, &sfoSize);

// Calc SFO hash for PSP.
if (cryptedData != 0) {
if (cryptedData != 0 || (subWrite && wasCrypted)) {
int offset = sfoFile->GetDataOffset(sfoData, "SAVEDATA_PARAMS");
if(offset >= 0)
UpdateHash(sfoData, (int)sfoSize, offset, DetermineCryptMode(param));
Expand Down

0 comments on commit d58f826

Please sign in to comment.