ctr_Repair/trunk/CardSaveData/common/savefile/savedata.cpp

80 lines
2.3 KiB
C++

#include <wchar.h>
#include <string.h>
#include <nn/fs.h>
#include "savedata.h"
#include <nn/fs/fs_ResultPrivate.h>
#include <nn/fs/CTR/MPCore/fs_ApiForHwCheck.h>
#include <nn/am/am_ApiSystemMenu.h>
#include <nn/am/am_ApiLocalImporter.h>
//プロダクトコード
//結果は PrdCord に格納
bool SaveData::GetPrdCode()
{
PrdCode[0] = 0;//clear
s32 numPrograms;
nn::ProgramId programId;
LastNnResult = nn::am::InitializeForLocalImporter();
if (LastNnResult.IsFailure()){
nn::am::FinalizeForLocalImporter();
return false;
}
LastNnResult = nn::am::GetProgramList(&numPrograms, &programId, 1, nn::fs::MEDIA_TYPE_CTRCARD);
if (LastNnResult.IsFailure()){
nn::am::FinalizeForLocalImporter();
return false;
}
LastNnResult = nn::am::GetProductCode( (nn::ProductCode*)&PrdCode,nn::fs::MEDIA_TYPE_CTRCARD,programId);
nn::am::FinalizeForLocalImporter();
PrdCode[sizeof(nn::ProductCode)] = 0;//表示時のオーバラン対策
return LastNnResult.IsSuccess();
}
//セーブ作成、成功時はマウント状態
myResult SaveData::Format(tArcInfo *pinfo)
{
if ( IsMounted )return RESULT_ALREADY_MOUNT;
LastNnResult = nn::fs::FormatCtrCardSaveData(pinfo->FileEntry,pinfo->DirEntry,pinfo->Dup);
if (LastNnResult.IsFailure())return RESULT_FAIL_FORMAT;
if ( Mount() != RESULT_OK )return RESULT_FAIL_MOUNT;
IsMounted = true;
return RESULT_OK;
}
//コミット
bool SaveData::Commit()
{
LastNnResult=nn::fs::CommitSaveData(devName);
return LastNnResult.IsSuccess();
}
//マウント
bool SaveData::MountCore()
{
//リストア先の場合、コール元でチェック(エラーによってはフォーマットすれば使える)
LastNnResult = nn::fs::MountCtrCardSaveDataForCheck(devName);
return LastNnResult.IsSuccess();
}
//フォーマット情報
void SaveData::GetFormatInfoCore(tArcInfo *ifo)
{
LastNnResult = nn::fs::GetCtrCardSaveDataFormatInfo(&ifo->FileEntry,&ifo->DirEntry,&ifo->Dup);
}
//コンストラクタ
SaveData::SaveData()
{
PrdCode[0] = 0;
strcpy(devName,"data:");
SetRootPath(L"data:");
}