mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
r629を巻き戻し。サイズチェック時はエラーをスキップできないので。
NN_UTIL_RETURN_IF_FAILEDをCOMMON_LOGGER_RETURN_IF_FAILEDに置換 CmacAdderが出力先ディレクトリ初期化時にエラーで止まっていたので修正 git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@631 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
parent
4111408dcb
commit
7320c776ea
@ -234,10 +234,8 @@ nn::Result NandSavedataChecker::CleanUp(bool erase)
|
||||
{
|
||||
nn::Result result;
|
||||
|
||||
result = m_pSharedExtSaveChecker->CalculateFileSize();
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
result = m_pSysSaveChecker->CalculateFileSize();
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
m_pSharedExtSaveChecker->CalculateFileSize();
|
||||
m_pSysSaveChecker->CalculateFileSize();
|
||||
|
||||
result = m_pSharedExtSaveChecker->CleanUp(erase);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
|
||||
@ -418,7 +418,7 @@ nn::Result ImportCountryLanguageData()
|
||||
SetLanguage(reinterpret_cast<common::CfgCountryLanguage*> (buf)->language);
|
||||
}
|
||||
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -539,7 +539,7 @@ nn::Result ImportMcuRtc(common::HardwareStateManager& manager)
|
||||
}
|
||||
}
|
||||
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -678,7 +678,7 @@ nn::Result ImportIvs()
|
||||
{
|
||||
result = nn::fs::CTR::ImportIntegrityVerificationSeed(
|
||||
*reinterpret_cast<nn::fs::CTR::IntegrityVerificationSeed*>(dec));
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
COMMON_LOGGER("Import SDCI.\n");
|
||||
}
|
||||
else
|
||||
@ -703,7 +703,7 @@ nn::Result ImportIvs()
|
||||
}
|
||||
nn::fs::Unmount(common::NAND_ARCHIVE_NAME);
|
||||
}
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1725,7 +1725,7 @@ nn::Result InitializeHardwareDependentSetting()
|
||||
|
||||
common::CfgCalData cfgCalData;
|
||||
result = ImportCalData(&cfgCalData);
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
|
||||
result = nn::cfg::CTR::init::SetConfig(GET_CFG_KEY(NN_CFG_HID, NN_CFG_HID_CAL_TOUCHPANEL),
|
||||
&cfgCalData.touchPanelCfgData, sizeof(TouchPanelCfgData));
|
||||
@ -1778,11 +1778,11 @@ nn::Result SetupVersionAndFileList()
|
||||
|
||||
// ファイル一覧を読み込む
|
||||
nn::Result result = ReadFileList(&s_SdFileSize, &s_FileLists);
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
|
||||
// バージョンデータを読み込む
|
||||
result = ReadVersionData();
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
|
||||
return result;
|
||||
}
|
||||
@ -1801,7 +1801,7 @@ nn::Result ReadFileList(SdFileSize* sdFiles, common::ImportDataList* fileList)
|
||||
|
||||
// サイズ取得のため一時的に開く
|
||||
result = file.TryInitialize(common::FILE_LIST_PATHNAME);
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
|
||||
result = file.TryGetSize(&fileSize);
|
||||
if (result.IsFailure())
|
||||
|
||||
@ -39,14 +39,14 @@ PreinstallImporter::~PreinstallImporter()
|
||||
nn::Result PreinstallImporter::SetupSd(bool* isAlreadyAvailable)
|
||||
{
|
||||
// SDカードがインポート可能状態かどうかチェック
|
||||
NN_UTIL_RETURN_IF_FAILED(
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(
|
||||
nn::am::QueryAvailableExternalTitleDatabase(isAlreadyAvailable)
|
||||
);
|
||||
|
||||
// タイトルデータベースを作成する
|
||||
if (!*isAlreadyAvailable)
|
||||
{
|
||||
NN_UTIL_RETURN_IF_FAILED(
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(
|
||||
nn::am::InitializeExternalTitleDatabase()
|
||||
);
|
||||
}
|
||||
@ -68,7 +68,7 @@ nn::Result PreinstallImporter::ListTitles(nn::ProgramId* list, size_t* num, bit6
|
||||
}
|
||||
|
||||
// 通信結果をパースしてタイトルリストを作成する
|
||||
NN_UTIL_RETURN_IF_FAILED(
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(
|
||||
GetHtmlBodyAndParseXmlData(comm, list, num)
|
||||
);
|
||||
return nn::ResultSuccess();
|
||||
@ -78,7 +78,7 @@ nn::Result PreinstallImporter::ListTitlesBasedOnTickets(nn::ProgramId* list, siz
|
||||
{
|
||||
s32 personalizedTicketNum;
|
||||
nn::am::TicketInfo ticketInfo[256];
|
||||
NN_UTIL_RETURN_IF_FAILED(
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(
|
||||
nn::am::GetPersonalizedTicketInfoList(&personalizedTicketNum, ticketInfo, 256)
|
||||
);
|
||||
|
||||
@ -121,7 +121,7 @@ nn::Result PreinstallImporter::GetHtmlBodyAndParseXmlData(BgsCommunicator& comm,
|
||||
}
|
||||
|
||||
// XMLを解析してタイトルリストを設定する
|
||||
NN_UTIL_RETURN_IF_FAILED(ParseXmlData(buf, list, num));
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(ParseXmlData(buf, list, num));
|
||||
|
||||
return nn::ResultSuccess();
|
||||
}
|
||||
@ -140,7 +140,7 @@ nn::Result PreinstallImporter::ParseXmlData(void* buf, nn::ProgramId* list, size
|
||||
nn::xml::simple::SimpleXmlParser simpleXmlParser(pAllocator);
|
||||
const nn::xml::simple::SimpleXmlParser::Node* pTaskIdNode;
|
||||
|
||||
NN_UTIL_RETURN_IF_FAILED(
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(
|
||||
SetNodetoTitleIds(simpleXmlParser, xmlResult, &pTaskIdNode)
|
||||
);
|
||||
|
||||
|
||||
@ -1,153 +1,153 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: Horizon
|
||||
File: RegionIdModifier.cpp
|
||||
|
||||
Copyright (C)2011 Nintendo Co., Ltd. All rights reserved.
|
||||
|
||||
These coded instructions, statements, and computer programs contain
|
||||
proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||
Company Ltd., and are protected by Federal copyright law. They may
|
||||
not be disclosed to third parties or copied or duplicated in any form,
|
||||
in whole or in part, without the prior written consent of Nintendo.
|
||||
|
||||
$Rev:$
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include "RegionIdModifier.h"
|
||||
#include <cwchar>
|
||||
#include <cstring>
|
||||
|
||||
struct CountryData
|
||||
{
|
||||
u32 id; // 上記定数にあるように、国IDと地域IDを組み合わせたID
|
||||
u16 regionName[nn::cfg::CTR::CFG_SIMPLE_ADDRESS_NUM_LANGUAGES][nn::cfg::CTR::CFG_SIMPLE_ADDRESS_NAME_LENGTH]; // NULL終端込み
|
||||
u8 order[nn::cfg::CTR::CFG_SIMPLE_ADDRESS_NUM_LANGUAGES]; // 言語ごとの地域名並び順(「未設定」が0になるので、最初の地域は1)
|
||||
u16 latitude; // リストの値を 65536/360 倍して格納して下さい
|
||||
u16 longitude; // リストの値を 65536/360 倍して格納して下さい
|
||||
};
|
||||
|
||||
const size_t NUP_VERSION_TO_REGIONNUM[] =
|
||||
{
|
||||
1, // ローンチ(0)
|
||||
1, // 0thNUP(1)
|
||||
2, // 1stNUP(2)
|
||||
2, // 1.05NUP(3)
|
||||
2, // 1.1NUP(4)
|
||||
3, // 2ndNUP(5)
|
||||
3, // 2.1NUP(6)
|
||||
};
|
||||
|
||||
const wchar_t* DIR_PATH[] =
|
||||
{
|
||||
L"0/JP/",
|
||||
L"0/US/",
|
||||
L"0/EU/",
|
||||
L"2/JP/",
|
||||
L"2/US/",
|
||||
L"2/EU/",
|
||||
L"5/JP/",
|
||||
L"5/US/",
|
||||
L"5/EU/"
|
||||
};
|
||||
|
||||
RegionIdModifier::RegionIdModifier(u16 id, u8 nupVersion, u8 regionCode, const wchar_t* regionName)
|
||||
{
|
||||
m_Id = id;
|
||||
m_NupVersion = nupVersion;
|
||||
m_RegionCode = regionCode;
|
||||
if (regionName != NULL)
|
||||
{
|
||||
std::wcsncpy(m_RegionName, regionName, sizeof(m_RegionName) / sizeof(wchar_t));
|
||||
}
|
||||
}
|
||||
|
||||
bool RegionIdModifier::IsValid()
|
||||
{
|
||||
return (m_Id & 0x00ff) != 0x01;
|
||||
}
|
||||
|
||||
const PathList* RegionIdModifier::GetDirectoryPath()
|
||||
{
|
||||
// 範囲外のリージョン
|
||||
if (nn::cfg::CTR::CFG_REGION_EUROPE < m_RegionCode)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (u8 i = 0; i < nn::cfg::CTR::CFG_REGION_EUROPE + 1; i++)
|
||||
{
|
||||
std::wcsncpy(m_DirectoryPathBuf[i].path, DIR_PATH[m_RegionCode + i * (nn::cfg::CTR::CFG_REGION_EUROPE + 1)],
|
||||
PATHLIST_LENGTH);
|
||||
}
|
||||
|
||||
return m_DirectoryPathBuf;
|
||||
}
|
||||
|
||||
size_t RegionIdModifier::GetDirectoryPathNum()
|
||||
{
|
||||
// 範囲外のリージョン
|
||||
if (nn::cfg::CTR::CFG_REGION_EUROPE < m_RegionCode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
const size_t countryNum = sizeof(NUP_VERSION_TO_REGIONNUM) / sizeof(NUP_VERSION_TO_REGIONNUM[0]);
|
||||
if (m_NupVersion > countryNum - 1)
|
||||
{
|
||||
return NUP_VERSION_TO_REGIONNUM[countryNum - 1];
|
||||
}
|
||||
else
|
||||
{
|
||||
return NUP_VERSION_TO_REGIONNUM[m_NupVersion];
|
||||
}
|
||||
}
|
||||
|
||||
const wchar_t* RegionIdModifier::GetFileName()
|
||||
{
|
||||
std::swprintf(m_FileNameBuf, sizeof(m_FileNameBuf), L"%d_LZ.bin", m_Id >> 8);
|
||||
return m_FileNameBuf;
|
||||
}
|
||||
|
||||
const PathList* RegionIdModifier::GetFilePath()
|
||||
{
|
||||
std::memset(m_FilePathBuf, 0, sizeof(m_FilePathBuf));
|
||||
GetDirectoryPath();
|
||||
for (u8 i = 0; i < GetDirectoryPathNum(); i++)
|
||||
{
|
||||
size_t writeSize = std::wcslen(m_DirectoryPathBuf[i].path);
|
||||
std::wcsncpy(m_FilePathBuf[i].path, m_DirectoryPathBuf[i].path, writeSize);
|
||||
std::wcsncat(m_FilePathBuf[i].path, GetFileName(), PATHLIST_LENGTH - writeSize);
|
||||
}
|
||||
|
||||
return m_FilePathBuf;
|
||||
}
|
||||
|
||||
size_t RegionIdModifier::GetFilePathNum()
|
||||
{
|
||||
return GetDirectoryPathNum();
|
||||
}
|
||||
|
||||
bool RegionIdModifier::GetValidRegionId(void* buf, size_t size, u8* id)
|
||||
{
|
||||
if (buf == NULL || size == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
u32 numRegion; // その国に含まれる地域の数
|
||||
numRegion = *reinterpret_cast<u32*>(buf);
|
||||
|
||||
CountryData* pCountry;
|
||||
pCountry = reinterpret_cast<CountryData*>(&reinterpret_cast<u32*>(buf)[1]);
|
||||
|
||||
for (u32 i = 0; i < numRegion + 1; i++)
|
||||
{
|
||||
if (std::wcscmp(m_RegionName, reinterpret_cast<wchar_t*>(pCountry->regionName[0])) == 0)
|
||||
{
|
||||
*id = (pCountry->id >> 16) & 0x00ff;
|
||||
return true;
|
||||
}
|
||||
pCountry++;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: Horizon
|
||||
File: RegionIdModifier.cpp
|
||||
|
||||
Copyright (C)2011 Nintendo Co., Ltd. All rights reserved.
|
||||
|
||||
These coded instructions, statements, and computer programs contain
|
||||
proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||
Company Ltd., and are protected by Federal copyright law. They may
|
||||
not be disclosed to third parties or copied or duplicated in any form,
|
||||
in whole or in part, without the prior written consent of Nintendo.
|
||||
|
||||
$Rev:$
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include "RegionIdModifier.h"
|
||||
#include <cwchar>
|
||||
#include <cstring>
|
||||
|
||||
struct CountryData
|
||||
{
|
||||
u32 id; // 上記定数にあるように、国IDと地域IDを組み合わせたID
|
||||
u16 regionName[nn::cfg::CTR::CFG_SIMPLE_ADDRESS_NUM_LANGUAGES][nn::cfg::CTR::CFG_SIMPLE_ADDRESS_NAME_LENGTH]; // NULL終端込み
|
||||
u8 order[nn::cfg::CTR::CFG_SIMPLE_ADDRESS_NUM_LANGUAGES]; // 言語ごとの地域名並び順(「未設定」が0になるので、最初の地域は1)
|
||||
u16 latitude; // リストの値を 65536/360 倍して格納して下さい
|
||||
u16 longitude; // リストの値を 65536/360 倍して格納して下さい
|
||||
};
|
||||
|
||||
const size_t NUP_VERSION_TO_REGIONNUM[] =
|
||||
{
|
||||
1, // ローンチ(0)
|
||||
1, // 0thNUP(1)
|
||||
2, // 1stNUP(2)
|
||||
2, // 1.05NUP(3)
|
||||
2, // 1.1NUP(4)
|
||||
3, // 2ndNUP(5)
|
||||
3, // 2.1NUP(6)
|
||||
};
|
||||
|
||||
const wchar_t* DIR_PATH[] =
|
||||
{
|
||||
L"0/JP/",
|
||||
L"0/US/",
|
||||
L"0/EU/",
|
||||
L"2/JP/",
|
||||
L"2/US/",
|
||||
L"2/EU/",
|
||||
L"5/JP/",
|
||||
L"5/US/",
|
||||
L"5/EU/"
|
||||
};
|
||||
|
||||
RegionIdModifier::RegionIdModifier(u16 id, u8 nupVersion, u8 regionCode, const wchar_t* regionName)
|
||||
{
|
||||
m_Id = id;
|
||||
m_NupVersion = nupVersion;
|
||||
m_RegionCode = regionCode;
|
||||
if (regionName != NULL)
|
||||
{
|
||||
std::wcsncpy(m_RegionName, regionName, sizeof(m_RegionName) / sizeof(wchar_t));
|
||||
}
|
||||
}
|
||||
|
||||
bool RegionIdModifier::IsValid()
|
||||
{
|
||||
return (m_Id & 0x00ff) != 0x01;
|
||||
}
|
||||
|
||||
const PathList* RegionIdModifier::GetDirectoryPath()
|
||||
{
|
||||
// 範囲外のリージョン
|
||||
if (nn::cfg::CTR::CFG_REGION_EUROPE < m_RegionCode)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (u8 i = 0; i < nn::cfg::CTR::CFG_REGION_EUROPE + 1; i++)
|
||||
{
|
||||
std::wcsncpy(m_DirectoryPathBuf[i].path, DIR_PATH[m_RegionCode + i * (nn::cfg::CTR::CFG_REGION_EUROPE + 1)],
|
||||
PATHLIST_LENGTH);
|
||||
}
|
||||
|
||||
return m_DirectoryPathBuf;
|
||||
}
|
||||
|
||||
size_t RegionIdModifier::GetDirectoryPathNum()
|
||||
{
|
||||
// 範囲外のリージョン
|
||||
if (nn::cfg::CTR::CFG_REGION_EUROPE < m_RegionCode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
const size_t countryNum = sizeof(NUP_VERSION_TO_REGIONNUM) / sizeof(NUP_VERSION_TO_REGIONNUM[0]);
|
||||
if (m_NupVersion > countryNum - 1)
|
||||
{
|
||||
return NUP_VERSION_TO_REGIONNUM[countryNum - 1];
|
||||
}
|
||||
else
|
||||
{
|
||||
return NUP_VERSION_TO_REGIONNUM[m_NupVersion];
|
||||
}
|
||||
}
|
||||
|
||||
const wchar_t* RegionIdModifier::GetFileName()
|
||||
{
|
||||
std::swprintf(m_FileNameBuf, sizeof(m_FileNameBuf), L"%d_LZ.bin", m_Id >> 8);
|
||||
return m_FileNameBuf;
|
||||
}
|
||||
|
||||
const PathList* RegionIdModifier::GetFilePath()
|
||||
{
|
||||
std::memset(m_FilePathBuf, 0, sizeof(m_FilePathBuf));
|
||||
GetDirectoryPath();
|
||||
for (u8 i = 0; i < GetDirectoryPathNum(); i++)
|
||||
{
|
||||
size_t writeSize = std::wcslen(m_DirectoryPathBuf[i].path);
|
||||
std::wcsncpy(m_FilePathBuf[i].path, m_DirectoryPathBuf[i].path, writeSize);
|
||||
std::wcsncat(m_FilePathBuf[i].path, GetFileName(), PATHLIST_LENGTH - writeSize);
|
||||
}
|
||||
|
||||
return m_FilePathBuf;
|
||||
}
|
||||
|
||||
size_t RegionIdModifier::GetFilePathNum()
|
||||
{
|
||||
return GetDirectoryPathNum();
|
||||
}
|
||||
|
||||
bool RegionIdModifier::GetValidRegionId(void* buf, size_t size, u8* id)
|
||||
{
|
||||
if (buf == NULL || size == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
u32 numRegion; // その国に含まれる地域の数
|
||||
numRegion = *reinterpret_cast<u32*>(buf);
|
||||
|
||||
CountryData* pCountry;
|
||||
pCountry = reinterpret_cast<CountryData*>(&reinterpret_cast<u32*>(buf)[1]);
|
||||
|
||||
for (u32 i = 0; i < numRegion + 1; i++)
|
||||
{
|
||||
if (std::wcscmp(m_RegionName, reinterpret_cast<wchar_t*>(pCountry->regionName[0])) == 0)
|
||||
{
|
||||
*id = (pCountry->id >> 16) & 0x00ff;
|
||||
return true;
|
||||
}
|
||||
pCountry++;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1,89 +1,89 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: Horizon
|
||||
File: RegionIdModifier.h
|
||||
|
||||
Copyright (C)2011 Nintendo Co., Ltd. All rights reserved.
|
||||
|
||||
These coded instructions, statements, and computer programs contain
|
||||
proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||
Company Ltd., and are protected by Federal copyright law. They may
|
||||
not be disclosed to third parties or copied or duplicated in any form,
|
||||
in whole or in part, without the prior written consent of Nintendo.
|
||||
|
||||
$Rev:$
|
||||
*---------------------------------------------------------------------------*/
|
||||
#ifndef _REGION_ID_MODIFIER_H_
|
||||
#define _REGION_ID_MODIFIER_H_
|
||||
|
||||
#if defined(__ARMCC_VERSION)
|
||||
#include <nn.h>
|
||||
#include <nn/cfg.h>
|
||||
#else
|
||||
#include "test_common.h"
|
||||
#endif
|
||||
|
||||
const size_t PATHLIST_LENGTH = 32;
|
||||
struct PathList
|
||||
{
|
||||
wchar_t path[PATHLIST_LENGTH];
|
||||
};
|
||||
|
||||
//! @brief データ移行ツールで破壊した地域idを修正するためのクラスです
|
||||
class RegionIdModifier
|
||||
{
|
||||
public:
|
||||
//! @brief パラメータを与えて初期化します。
|
||||
//! @param[in] id SimpleAddressの上位16ビット
|
||||
//! @param[in] nupVersion NUPバージョン
|
||||
//! @param[in] regionCode リージョン
|
||||
//! @param[in] regionName 地域名
|
||||
RegionIdModifier(u16 id, u8 nupVersion, u8 regionCode, const wchar_t* regionName);
|
||||
~RegionIdModifier() {};
|
||||
|
||||
//! @brief 正しいIDかどうか
|
||||
bool IsValid();
|
||||
|
||||
//! @brief バージョン、リージョンに応じたディレクトリパスの配列を取得します
|
||||
//! @return パス名。バージョン・リージョンが正しくない場合はNULL
|
||||
const PathList* GetDirectoryPath();
|
||||
|
||||
//! @brief バージョン、リージョンに応じたディレクトリパス数を取得します
|
||||
size_t GetDirectoryPathNum();
|
||||
|
||||
//! @brief 国idに応じたファイル名を取得します
|
||||
const wchar_t* GetFileName();
|
||||
|
||||
//! @brief バージョン、リージョン、国idに応じたファイルパスの配列を取得します
|
||||
const PathList* GetFilePath();
|
||||
|
||||
//! @brief バージョン、リージョン、国idに応じたファイルパス数を取得します
|
||||
size_t GetFilePathNum();
|
||||
|
||||
//! @brief 与えられたバッファから正しい地域idを取得します
|
||||
//! @param[in] buf 展開済みの地域データの入ったバッファ
|
||||
//! @param[in] size バッファサイズ
|
||||
//! @param[out] id 正しいid
|
||||
//! @return 正しいidが見つかったかどうか
|
||||
bool GetValidRegionId(void* buf , size_t size, u8* id);
|
||||
|
||||
private:
|
||||
//! @brief SimpleAddressの上位16ビット
|
||||
// 上位8ビットが国id,下位8ビットが地域
|
||||
u16 m_Id;
|
||||
|
||||
//! @brief NUPバージョン番号
|
||||
u8 m_NupVersion;
|
||||
//! @brief リージョンコード
|
||||
u8 m_RegionCode;
|
||||
//! @brief 地域名
|
||||
wchar_t m_RegionName[nn::cfg::CTR::CFG_SIMPLE_ADDRESS_NAME_LENGTH];
|
||||
|
||||
//! @brief ファイル名を保存するバッファ
|
||||
wchar_t m_FileNameBuf[PATHLIST_LENGTH];
|
||||
//! @brief ディレクトリパスを保存するバッファ
|
||||
PathList m_DirectoryPathBuf[nn::cfg::CTR::CFG_REGION_EUROPE + 1];
|
||||
//! @brief ファイルパスを保存するバッファ
|
||||
PathList m_FilePathBuf[nn::cfg::CTR::CFG_REGION_EUROPE + 1];
|
||||
};
|
||||
|
||||
#endif // _REGION_ID_MODIFIER_H_
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: Horizon
|
||||
File: RegionIdModifier.h
|
||||
|
||||
Copyright (C)2011 Nintendo Co., Ltd. All rights reserved.
|
||||
|
||||
These coded instructions, statements, and computer programs contain
|
||||
proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||
Company Ltd., and are protected by Federal copyright law. They may
|
||||
not be disclosed to third parties or copied or duplicated in any form,
|
||||
in whole or in part, without the prior written consent of Nintendo.
|
||||
|
||||
$Rev:$
|
||||
*---------------------------------------------------------------------------*/
|
||||
#ifndef _REGION_ID_MODIFIER_H_
|
||||
#define _REGION_ID_MODIFIER_H_
|
||||
|
||||
#if defined(__ARMCC_VERSION)
|
||||
#include <nn.h>
|
||||
#include <nn/cfg.h>
|
||||
#else
|
||||
#include "test_common.h"
|
||||
#endif
|
||||
|
||||
const size_t PATHLIST_LENGTH = 32;
|
||||
struct PathList
|
||||
{
|
||||
wchar_t path[PATHLIST_LENGTH];
|
||||
};
|
||||
|
||||
//! @brief データ移行ツールで破壊した地域idを修正するためのクラスです
|
||||
class RegionIdModifier
|
||||
{
|
||||
public:
|
||||
//! @brief パラメータを与えて初期化します。
|
||||
//! @param[in] id SimpleAddressの上位16ビット
|
||||
//! @param[in] nupVersion NUPバージョン
|
||||
//! @param[in] regionCode リージョン
|
||||
//! @param[in] regionName 地域名
|
||||
RegionIdModifier(u16 id, u8 nupVersion, u8 regionCode, const wchar_t* regionName);
|
||||
~RegionIdModifier() {};
|
||||
|
||||
//! @brief 正しいIDかどうか
|
||||
bool IsValid();
|
||||
|
||||
//! @brief バージョン、リージョンに応じたディレクトリパスの配列を取得します
|
||||
//! @return パス名。バージョン・リージョンが正しくない場合はNULL
|
||||
const PathList* GetDirectoryPath();
|
||||
|
||||
//! @brief バージョン、リージョンに応じたディレクトリパス数を取得します
|
||||
size_t GetDirectoryPathNum();
|
||||
|
||||
//! @brief 国idに応じたファイル名を取得します
|
||||
const wchar_t* GetFileName();
|
||||
|
||||
//! @brief バージョン、リージョン、国idに応じたファイルパスの配列を取得します
|
||||
const PathList* GetFilePath();
|
||||
|
||||
//! @brief バージョン、リージョン、国idに応じたファイルパス数を取得します
|
||||
size_t GetFilePathNum();
|
||||
|
||||
//! @brief 与えられたバッファから正しい地域idを取得します
|
||||
//! @param[in] buf 展開済みの地域データの入ったバッファ
|
||||
//! @param[in] size バッファサイズ
|
||||
//! @param[out] id 正しいid
|
||||
//! @return 正しいidが見つかったかどうか
|
||||
bool GetValidRegionId(void* buf , size_t size, u8* id);
|
||||
|
||||
private:
|
||||
//! @brief SimpleAddressの上位16ビット
|
||||
// 上位8ビットが国id,下位8ビットが地域
|
||||
u16 m_Id;
|
||||
|
||||
//! @brief NUPバージョン番号
|
||||
u8 m_NupVersion;
|
||||
//! @brief リージョンコード
|
||||
u8 m_RegionCode;
|
||||
//! @brief 地域名
|
||||
wchar_t m_RegionName[nn::cfg::CTR::CFG_SIMPLE_ADDRESS_NAME_LENGTH];
|
||||
|
||||
//! @brief ファイル名を保存するバッファ
|
||||
wchar_t m_FileNameBuf[PATHLIST_LENGTH];
|
||||
//! @brief ディレクトリパスを保存するバッファ
|
||||
PathList m_DirectoryPathBuf[nn::cfg::CTR::CFG_REGION_EUROPE + 1];
|
||||
//! @brief ファイルパスを保存するバッファ
|
||||
PathList m_FilePathBuf[nn::cfg::CTR::CFG_REGION_EUROPE + 1];
|
||||
};
|
||||
|
||||
#endif // _REGION_ID_MODIFIER_H_
|
||||
|
||||
@ -233,9 +233,9 @@ nn::Result ShopOperationConnect(ECAccountInfo** pAccountInfo)
|
||||
-------------------------------------------------------------------- */
|
||||
COMMON_LOGGER_DETAIL("nim::Shop::Connect\n");
|
||||
result = nn::nim::Shop::Connect(pAccountInfo, s_EcBufffer, EC_BUFFER_SIZE);
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
result = CheckStandbyMode((*pAccountInfo)->isStandbyMode);
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
|
||||
PrintECAccountInfo(**pAccountInfo);
|
||||
COMMON_LOGGER_DETAIL("\n");
|
||||
@ -254,7 +254,7 @@ nn::Result ShopOperationInitialize()
|
||||
{
|
||||
COMMON_LOGGER_DETAIL("nim::InitializeForShop\n");
|
||||
result = nn::nim::InitializeForShop();
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
s_IsNimShopInitialized = true;
|
||||
}
|
||||
|
||||
@ -264,11 +264,11 @@ nn::Result ShopOperationInitialize()
|
||||
COMMON_LOGGER_DETAIL("nim::Shop::SetApplication Id\n");
|
||||
|
||||
nn::nim::Shop::SetApplicationId();
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
|
||||
COMMON_LOGGER_DETAIL("nim::Shop::SetTIN\n");
|
||||
result = nn::nim::Shop::SetTin(CONSOLE_RESTORE_TIN);
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
|
||||
return result;
|
||||
}
|
||||
@ -277,14 +277,14 @@ nn::Result ShopOperationConnect()
|
||||
{
|
||||
nn::Result result;
|
||||
result = ShopOperationInitialize();
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
|
||||
/* -------------------------------------------------------------------
|
||||
Connect
|
||||
-------------------------------------------------------------------- */
|
||||
ECAccountInfo* pAccountInfo;
|
||||
result = ShopOperationConnect(&pAccountInfo);
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
|
||||
return result;
|
||||
}
|
||||
@ -298,7 +298,7 @@ nn::Result ShopOperationFinalize()
|
||||
-------------------------------------------------------------------- */
|
||||
COMMON_LOGGER_DETAIL("nim::FinalizeForShop\n");
|
||||
result = nn::nim::FinalizeForShop();
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
s_IsNimShopInitialized = false;
|
||||
|
||||
return result;
|
||||
|
||||
@ -101,7 +101,7 @@ nn::Result GetEntry(ES_NAMESPACE::ESTitleId titleId, EC_NAMESPACE::ECTitleCatalo
|
||||
nn::Result GetTitleConfig(const ES_NAMESPACE::ESTitleId titleId, nn::nim::TitleConfig *titleConfig, s64* requiredSize)
|
||||
{
|
||||
EC_NAMESPACE::ECTitleCatalogEntry *entry;
|
||||
NN_UTIL_RETURN_IF_FAILED(GetEntry(titleId, &entry));
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(GetEntry(titleId, &entry));
|
||||
|
||||
titleConfig->titleId =titleId;
|
||||
titleConfig->version=std::strtoull(GetAttribute(entry->attributes, entry->nAttributes, "Version"), NULL, 10);
|
||||
@ -307,7 +307,7 @@ nn::Result WaitCancelled()
|
||||
while(true)
|
||||
{
|
||||
// キャンセルがResultとして返ってくる / ダウンロード終了まで待つ
|
||||
NN_UTIL_RETURN_IF_FAILED(nn::nim::Shop::GetProgress(&progress));
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(nn::nim::Shop::GetProgress(&progress));
|
||||
if(progress.lastResult==nn::nim::ResultCancelRequested() || progress.state==nn::nim::TITLE_STATE_FINISHED)
|
||||
{
|
||||
break;
|
||||
|
||||
@ -759,7 +759,7 @@ nn::Result CalculateFileSizeRecursively(std::wstring currentDirectory, s64& file
|
||||
|
||||
NN_LOG("%s\n", common::GetCharStr(currentDirectory.c_str()));
|
||||
result = dir.TryInitialize(currentDirectory.c_str());
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
@ -786,7 +786,7 @@ nn::Result CalculateFileSizeRecursively(std::wstring currentDirectory, s64& file
|
||||
if (entry.attributes.isDirectory)
|
||||
{
|
||||
result = CalculateFileSizeRecursively(currentDirectory + std::wstring(entry.entryName) + std::wstring(L"/"), fileSize);
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
}
|
||||
// ファイルの場合
|
||||
else
|
||||
|
||||
@ -457,7 +457,7 @@ nn::Result SaveDataMover::Import(void* buf, size_t bufSize, bit32 id, u64* progr
|
||||
const int MAX_PATH_LEN = 127;
|
||||
char srcRoot[MAX_PATH_LEN + 1];
|
||||
|
||||
NN_UTIL_RETURN_IF_FAILED(nn::fs::CreateNewSharedExtSaveDataRawStorage(id));
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(nn::fs::CreateNewSharedExtSaveDataRawStorage(id));
|
||||
|
||||
// 2. fs::CreateNewSharedExtSaveDataRawStorage を呼び
|
||||
// 書き込み用の領域を作成します。
|
||||
|
||||
@ -98,7 +98,7 @@ nn::Result SdReaderWriter::WriteBuf(nn::fs::FileStream& file, const wchar_t* pat
|
||||
nn::Result result;
|
||||
|
||||
result = WriteBufCore(file, path, buf, size);
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
|
||||
result = file.TryFlush();
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
@ -116,7 +116,7 @@ nn::Result SdReaderWriter::WriteBufWithCmac(const wchar_t* path, void* buf, size
|
||||
nn::fs::FileStream file;
|
||||
|
||||
result = WriteBufCore(file, path, buf, size);
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
|
||||
bit8 sha256Hash[nn::crypto::Sha256Context::HASH_SIZE];
|
||||
nn::crypto::CalculateSha256(sha256Hash, buf, size);
|
||||
@ -173,7 +173,7 @@ nn::Result SdReaderWriter::ReadBuf(nn::fs::FileStream& file, const wchar_t* path
|
||||
nn::Result result;
|
||||
|
||||
result = ReadBufCore(file, path, buf, size, totalSize);
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
|
||||
file.Finalize();
|
||||
return result;
|
||||
@ -187,7 +187,7 @@ nn::Result SdReaderWriter::ReadBufWithCmac(const wchar_t* path, void* buf, size_
|
||||
NN_ASSERT(size > nn::crypto::AES_CMAC_MAC_SIZE);
|
||||
|
||||
result = ReadBufCore(file, path, buf, size, totalSize);
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
|
||||
|
||||
file.Finalize();
|
||||
// ハッシュが付加されていない
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
#include <nn/fs.h>
|
||||
#include <cstdlib>
|
||||
#include "configLoader.h"
|
||||
#include "CommonLogger.h"
|
||||
|
||||
namespace common
|
||||
{
|
||||
@ -10,8 +11,8 @@ Result ConfigFileLoader::Initialize(const wchar_t* fileName, void* buffer, const
|
||||
{
|
||||
s64 fileSize;
|
||||
FileInputStream fi;
|
||||
NN_UTIL_RETURN_IF_FAILED(fi.TryInitialize(fileName));
|
||||
NN_UTIL_RETURN_IF_FAILED(fi.TryGetSize(&fileSize));
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(fi.TryInitialize(fileName));
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(fi.TryGetSize(&fileSize));
|
||||
|
||||
// NULL終端ぶん読めるサイズを減らす
|
||||
if (fileSize > bufferSize - sizeof(wchar_t))
|
||||
@ -21,7 +22,7 @@ Result ConfigFileLoader::Initialize(const wchar_t* fileName, void* buffer, const
|
||||
}
|
||||
|
||||
m_Buffer = static_cast<wchar_t*>(buffer);
|
||||
NN_UTIL_RETURN_IF_FAILED(fi.TryRead(&m_UsedBufferSize, m_Buffer, fileSize));
|
||||
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(fi.TryRead(&m_UsedBufferSize, m_Buffer, fileSize));
|
||||
NN_LOG("config size = %d\n", m_UsedBufferSize);
|
||||
return ParseData();
|
||||
}
|
||||
|
||||
@ -39,6 +39,7 @@ SOURCES[] =
|
||||
../../common/configLoader.cpp
|
||||
../../common/VersionDetect.cpp
|
||||
|
||||
include $(ROOT)/common/BuildSwitch.om
|
||||
CTR_BANNER_SPEC = AutoBoot.bsf
|
||||
|
||||
ROMFS_ROOT = ../../common/romfiles
|
||||
@ -56,7 +57,7 @@ LIBS += libnn_cfg \
|
||||
|
||||
INSTALL_SDK_TOOL = true
|
||||
|
||||
ROM_SPEC_FILE = $(TARGET_PROGRAM).rsf
|
||||
ROM_SPEC_FILE = $(TARGET_NAME).rsf
|
||||
DESCRIPTOR = $(HORIZON_ROOT)/resources/specfiles/private/RepairTool.desc
|
||||
|
||||
include $(ROOT_OMAKE)/modulerules
|
||||
|
||||
@ -108,7 +108,11 @@ bool AddCmac(const wchar_t * from_path, void* buf, const size_t bufSize)
|
||||
const wchar_t* CMAC_DIR = L"CmacAdded";
|
||||
targetDirectory << from_path << CMAC_DIR;
|
||||
result = nn::fs::TryDeleteDirectoryRecursively(targetDirectory.str().c_str());
|
||||
COMMON_LOGGER_RETURN_FALSE_IF_FAILED(result);
|
||||
if(!(result <= nn::fs::ResultNotFound()))
|
||||
{
|
||||
COMMON_LOGGER_RETURN_FALSE_IF_FAILED(result);
|
||||
}
|
||||
|
||||
|
||||
result = nn::fs::TryCreateDirectory(targetDirectory.str().c_str());
|
||||
COMMON_LOGGER_RETURN_FALSE_IF_FAILED(result);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user