From febc1a9e177dfc9903898a12a64f4d5017e38e75 Mon Sep 17 00:00:00 2001 From: "Daniel R." <47796739+polybiusproxy@users.noreply.github.com> Date: Sat, 14 Sep 2024 19:00:22 +0200 Subject: [PATCH] core/libraries/save_data: Fix inaccurate behaviour on `sceSaveDataSetupSaveDataMemory` (#913) --- src/core/libraries/save_data/savedata.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/core/libraries/save_data/savedata.cpp b/src/core/libraries/save_data/savedata.cpp index 779c922e6..52349b355 100644 --- a/src/core/libraries/save_data/savedata.cpp +++ b/src/core/libraries/save_data/savedata.cpp @@ -769,13 +769,21 @@ int PS4_SYSV_ABI sceSaveDataSetupSaveDataMemory(u32 userId, size_t memorySize, LOG_INFO(Lib_SaveData, "called:userId = {}, memorySize = {}", userId, memorySize); + if (param == nullptr) { + return ORBIS_SAVE_DATA_ERROR_PARAMETER; + } + const auto& mount_dir = Common::FS::GetUserPath(Common::FS::PathType::SaveDataDir) / std::to_string(userId) / game_serial / "sdmemory"; - if (std::filesystem::exists(mount_dir)) { - return ORBIS_SAVE_DATA_ERROR_EXISTS; + if (!std::filesystem::exists(mount_dir)) { + std::filesystem::create_directories(mount_dir); } - std::filesystem::create_directories(mount_dir); + + // NOTE: Reminder that games can pass params: + // memset(param, 0, sizeof(param_t)); + // strncpy(param->title, "Beach Buggy Racing", 127); + std::vector buf(memorySize); Common::FS::IOFile::WriteBytes(mount_dir / "save_mem1.sav", buf); return ORBIS_OK;