diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/ActCompleter.cpp b/trunk/ConsoleDataMigration/sources/ConsoleRestore/ActCompleter.cpp index 67780a8..ba18441 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/ActCompleter.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/ActCompleter.cpp @@ -16,6 +16,7 @@ #include "ActCompleter.h" #include "Util.h" #include "CommonLogger.h" +#include "HeapManager.h" #include #include #include @@ -141,6 +142,7 @@ nn::Result ActCompleter::ExecImpl() if(nn::cfg::GetRegion() == nn::cfg::CFG_REGION_AMERICA) { + // COPPA対象の年齢なら復元する s_ApprovalId = nn::act::GetSalvagedApprovalId(); NN_UTIL_RETURN_IF_FAILED_2( SaveApprovalId(), @@ -176,6 +178,7 @@ nn::Result ActCompleter::SaveApprovalId() // Cave-accountのファイル書き込み設定 const char* const SYSTEM_SAVEDATA_ARCHIVE_NAME = "ssave:"; const char* const CAVE_FILE_NAME = "ssave:/s.bin"; + const size_t CAVE_FILE_SIZE = 143360; const u32 APPROVAL_ID_OFFSET = 0x11000; NN_UTIL_RETURN_IF_FAILED( @@ -186,7 +189,27 @@ nn::Result ActCompleter::SaveApprovalId() { nn::fs::FileOutputStream out(CAVE_FILE_NAME, true); - out.SetPosition(APPROVAL_ID_OFFSET); + + // ファイルサイズ分のダミーデータを書く + common::HeapManager dummyWriteData(CAVE_FILE_SIZE); + void* buf = dummyWriteData.GetAddr(); + if(buf != NULL) + { + std::memset(buf, 0, CAVE_FILE_SIZE); + s32 writeSize; + NN_UTIL_RETURN_IF_FAILED_1( + out.TryWrite(&writeSize, buf, CAVE_FILE_SIZE, true), + nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME)); + } + else + { + return nn::Result(nn::Result::LEVEL_FATAL, nn::Result::SUMMARY_OUT_OF_RESOURCE, nn::Result::MODULE_COMMON, + nn::Result::DESCRIPTION_OUT_OF_MEMORY); + } + + NN_UTIL_RETURN_IF_FAILED_1( + out.TrySeek(APPROVAL_ID_OFFSET, nn::fs::POSITION_BASE_BEGIN), + nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME)); s32 writeSize; NN_UTIL_RETURN_IF_FAILED_1( out.TryWrite(&writeSize, &s_ApprovalId, sizeof(s_ApprovalId), true),