Cave-accountのデフォルトファイルを使うように

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@794 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
N2614 2014-04-30 01:23:03 +00:00
parent dd108a5a7d
commit 3ea3ce3ff3
2 changed files with 21 additions and 6 deletions

View File

@ -24,6 +24,7 @@
#include <nn/actslv/actslv_Api.h>
#include <nn/fs/fs_ApiSysSaveData.h>
#include <nn/cfg/CTR/cfg_ApiSys.h>
#include <nn/drivers/aes/CTR/ARM946ES/driverAes_Types.h>
#include "AgeChecker.h"
@ -215,9 +216,11 @@ 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;
// Cave-accountのデフォルト値
const char* const CAVE_DEFAULT_FILE = "rom:/CAVE_ACCOUNT_save_0.bin";
NN_UTIL_RETURN_IF_FAILED(
nn::fs::CreateSystemSaveData(CAVE_ACCOUNT_US_SAVEDATA_ID, MAX_FILES, MAX_DIRECTORIES, SAVE_DATA_SIZE, true));
@ -227,23 +230,34 @@ nn::Result ActCompleter::SaveApprovalId()
{
nn::fs::FileOutputStream out(CAVE_FILE_NAME, true);
// ファイルサイズ分のダミーデータを書く
common::HeapManager dummyWriteData(CAVE_FILE_SIZE);
void* buf = dummyWriteData.GetAddr();
// デフォルトデータを書く
nn::fs::FileInputStream defaultFile;
NN_UTIL_RETURN_IF_FAILED_1(
defaultFile.TryInitialize(CAVE_DEFAULT_FILE),
nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME));
s64 fileSize = defaultFile.GetSize();
common::HeapManager heap(fileSize, AES_BLOCK_SIZE);
void* buf = heap.GetAddr();
if(buf != NULL)
{
std::memset(buf, 0, CAVE_FILE_SIZE);
s32 readSize;
NN_UTIL_RETURN_IF_FAILED_1(
defaultFile.TryRead(&readSize, buf, fileSize),
nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME));
s32 writeSize;
NN_UTIL_RETURN_IF_FAILED_1(
out.TryWrite(&writeSize, buf, CAVE_FILE_SIZE, true),
out.TryWrite(&writeSize, buf, fileSize, true),
nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME));
}
else
{
nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME);
return nn::Result(nn::Result::LEVEL_FATAL, nn::Result::SUMMARY_OUT_OF_RESOURCE, nn::Result::MODULE_COMMON,
nn::Result::DESCRIPTION_OUT_OF_MEMORY);
}
// 所定の位置までシークしてApproval IDを書く
NN_UTIL_RETURN_IF_FAILED_1(
out.TrySeek(APPROVAL_ID_OFFSET, nn::fs::POSITION_BASE_BEGIN),
nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME));
@ -252,6 +266,7 @@ nn::Result ActCompleter::SaveApprovalId()
out.TryWrite(&writeSize, &s_ApprovalId, sizeof(s_ApprovalId), true),
nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME));
// コミットする
NN_UTIL_RETURN_IF_FAILED_1(
nn::fs::CommitSystemSaveData(SYSTEM_SAVEDATA_ARCHIVE_NAME),
nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME));