From 1ff9f53557a1536379d2170ede9c63468cacb325 Mon Sep 17 00:00:00 2001 From: N2614 Date: Fri, 11 Apr 2014 07:56:21 +0000 Subject: [PATCH] =?UTF-8?q?CAVE=E3=81=AE=E3=82=BB=E3=83=BC=E3=83=96?= =?UTF-8?q?=E3=83=87=E3=83=BC=E3=82=BF=E3=81=8C=E6=9B=B8=E3=81=8D=E8=BE=BC?= =?UTF-8?q?=E3=82=81=E3=81=A6=E3=81=84=E3=81=AA=E3=81=8B=E3=81=A3=E3=81=9F?= =?UTF-8?q?=E3=81=AE=E3=81=A7=E3=83=80=E3=83=9F=E3=83=BC=E3=83=87=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E3=81=A7=E5=9F=8B=E3=82=81=E3=81=A6=E3=81=8B=E3=82=89?= =?UTF-8?q?Approval=20Id=E3=82=92=E6=9B=B8=E3=81=8D=E8=BE=BC=E3=82=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@785 385bec56-5757-e545-9c3a-d8741f4650f1 --- .../sources/ConsoleRestore/ActCompleter.cpp | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) 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),