mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
CAVEのセーブデータが書き込めていなかったのでダミーデータで埋めてからApproval Idを書き込む
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
This commit is contained in:
parent
2f7b370403
commit
1ff9f53557
@ -16,6 +16,7 @@
|
|||||||
#include "ActCompleter.h"
|
#include "ActCompleter.h"
|
||||||
#include "Util.h"
|
#include "Util.h"
|
||||||
#include "CommonLogger.h"
|
#include "CommonLogger.h"
|
||||||
|
#include "HeapManager.h"
|
||||||
#include <nn/ac/CTR/private/ac_InternalApi.h>
|
#include <nn/ac/CTR/private/ac_InternalApi.h>
|
||||||
#include <nn/act/act_ApiAdmin.h>
|
#include <nn/act/act_ApiAdmin.h>
|
||||||
#include <nn/act/act_ApiTransfer.h>
|
#include <nn/act/act_ApiTransfer.h>
|
||||||
@ -141,6 +142,7 @@ nn::Result ActCompleter::ExecImpl()
|
|||||||
|
|
||||||
if(nn::cfg::GetRegion() == nn::cfg::CFG_REGION_AMERICA)
|
if(nn::cfg::GetRegion() == nn::cfg::CFG_REGION_AMERICA)
|
||||||
{
|
{
|
||||||
|
// COPPA対象の年齢なら復元する
|
||||||
s_ApprovalId = nn::act::GetSalvagedApprovalId();
|
s_ApprovalId = nn::act::GetSalvagedApprovalId();
|
||||||
NN_UTIL_RETURN_IF_FAILED_2(
|
NN_UTIL_RETURN_IF_FAILED_2(
|
||||||
SaveApprovalId(),
|
SaveApprovalId(),
|
||||||
@ -176,6 +178,7 @@ nn::Result ActCompleter::SaveApprovalId()
|
|||||||
// Cave-accountのファイル書き込み設定
|
// Cave-accountのファイル書き込み設定
|
||||||
const char* const SYSTEM_SAVEDATA_ARCHIVE_NAME = "ssave:";
|
const char* const SYSTEM_SAVEDATA_ARCHIVE_NAME = "ssave:";
|
||||||
const char* const CAVE_FILE_NAME = "ssave:/s.bin";
|
const char* const CAVE_FILE_NAME = "ssave:/s.bin";
|
||||||
|
const size_t CAVE_FILE_SIZE = 143360;
|
||||||
const u32 APPROVAL_ID_OFFSET = 0x11000;
|
const u32 APPROVAL_ID_OFFSET = 0x11000;
|
||||||
|
|
||||||
NN_UTIL_RETURN_IF_FAILED(
|
NN_UTIL_RETURN_IF_FAILED(
|
||||||
@ -186,7 +189,27 @@ nn::Result ActCompleter::SaveApprovalId()
|
|||||||
|
|
||||||
{
|
{
|
||||||
nn::fs::FileOutputStream out(CAVE_FILE_NAME, true);
|
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;
|
s32 writeSize;
|
||||||
NN_UTIL_RETURN_IF_FAILED_1(
|
NN_UTIL_RETURN_IF_FAILED_1(
|
||||||
out.TryWrite(&writeSize, &s_ApprovalId, sizeof(s_ApprovalId), true),
|
out.TryWrite(&writeSize, &s_ApprovalId, sizeof(s_ApprovalId), true),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user