From 54f2c27ba024e4e072012de05b93dbb1b32bb3a1 Mon Sep 17 00:00:00 2001 From: Eladash Date: Fri, 21 Feb 2020 10:40:14 +0200 Subject: [PATCH] cellGameDataCheckCreate(2): Set nullptr in setParam * setParam is nullptr by default. * if setParam is null and it's new data, return error code. --- rpcs3/Emu/Cell/Modules/cellGame.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/rpcs3/Emu/Cell/Modules/cellGame.cpp b/rpcs3/Emu/Cell/Modules/cellGame.cpp index fd46726c3b..44f0ad7b95 100644 --- a/rpcs3/Emu/Cell/Modules/cellGame.cpp +++ b/rpcs3/Emu/Cell/Modules/cellGame.cpp @@ -545,8 +545,9 @@ error_code cellGameDataCheckCreate2(ppu_thread& ppu, u32 version, vm::cptr vm::var cbResult; vm::var cbGet; vm::var cbSet; - cbGet->isNewData = fs::is_dir(vfs::get(dir)) ? CELL_GAMEDATA_ISNEWDATA_NO : CELL_GAMEDATA_ISNEWDATA_YES; + const u32 new_data = fs::is_dir(vfs::get(dir)) ? CELL_GAMEDATA_ISNEWDATA_NO : CELL_GAMEDATA_ISNEWDATA_YES; + cbGet->isNewData = new_data; // TODO: Use the free space of the computer's HDD where RPCS3 is being run. cbGet->hddFreeSizeKB = 40 * 1024 * 1024 - 1; // Read explanation in cellHddGameCheck @@ -576,10 +577,6 @@ error_code cellGameDataCheckCreate2(ppu_thread& ppu, u32 version, vm::cptr strcpy_trunc(cbGet->getParam.titleLang[i], psf::get_string(sfo, fmt::format("TITLE_%02d", i))); } - vm::var setParam; - *setParam = cbGet->getParam; - cbSet->setParam = setParam; - funcStat(ppu, cbResult, cbGet, cbSet); switch (cbResult->result) @@ -597,7 +594,7 @@ error_code cellGameDataCheckCreate2(ppu_thread& ppu, u32 version, vm::cptr const std::string usrdir = dir + "/USRDIR"; const std::string vusrdir = vfs::get(usrdir); - if (!fs::is_dir(vusrdir) && !fs::create_path(vusrdir)) + if (new_data && !fs::create_path(vusrdir)) { return {CELL_GAME_ERROR_ACCESS_ERROR, usrdir}; } @@ -629,6 +626,10 @@ error_code cellGameDataCheckCreate2(ppu_thread& ppu, u32 version, vm::cptr psf::save_object(fs::file(vdir + "/PARAM.SFO", fs::rewrite), sfo); } + else if (new_data) + { + return CELL_GAMEDATA_ERROR_PARAM; + } return CELL_OK; }