From 233b1bf3daccb718989a8283990dcdba0761dce0 Mon Sep 17 00:00:00 2001 From: N2614 Date: Tue, 12 Jul 2011 07:51:24 +0000 Subject: [PATCH] =?UTF-8?q?ListTwlSaveDataDirectory=E3=81=AE=E6=8C=99?= =?UTF-8?q?=E5=8B=95=E3=82=92=E6=AD=A3=E3=81=97=E3=81=8F=20SdReaderWriter?= =?UTF-8?q?=E3=82=92=E3=82=B9=E3=82=BF=E3=83=83=E3=82=AF=E3=81=8B=E3=82=89?= =?UTF-8?q?=E7=A2=BA=E4=BF=9D=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= 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@378 385bec56-5757-e545-9c3a-d8741f4650f1 --- .../sources/ConsoleBackup/Exporter.cpp | 76 ++++++++++--------- 1 file changed, 41 insertions(+), 35 deletions(-) diff --git a/trunk/ConsoleDataMigration/sources/ConsoleBackup/Exporter.cpp b/trunk/ConsoleDataMigration/sources/ConsoleBackup/Exporter.cpp index 119bd79..6d0834e 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleBackup/Exporter.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleBackup/Exporter.cpp @@ -53,7 +53,6 @@ namespace ConsoleBackup namespace { -common::SdReaderWriter s_SdWriter; common::NtrNorData s_NtrNorData; common::CfgCountryLanguage s_CountryLanguage; @@ -169,7 +168,8 @@ nn::Result WriteTwlTitleList(std::vector& programIdList) writeSize += it->size() + sizeof('\n'); } - return s_SdWriter.WriteBufWithCmac(common::TWL_TITLELIST_PATHNAME, titleListBuf, writeSize); + common::SdReaderWriter sdWriter; + return sdWriter.WriteBufWithCmac(common::TWL_TITLELIST_PATHNAME, titleListBuf, writeSize); } else { @@ -186,7 +186,8 @@ nn::Result WriteRegionData() nn::cfg::CTR::CfgRegionCode region; region = nn::cfg::CTR::GetRegion(); - return s_SdWriter.WriteBufWithCmac(common::REGION_DATA_PATHNAME, ®ion, sizeof(nn::cfg::CTR::CfgRegionCode)); + common::SdReaderWriter sdWriter; + return sdWriter.WriteBufWithCmac(common::REGION_DATA_PATHNAME, ®ion, sizeof(nn::cfg::CTR::CfgRegionCode)); } nn::Result WriteCountryLanguageData() @@ -204,7 +205,8 @@ nn::Result WriteCountryLanguageData() // 言語設定 s_CountryLanguage.language = nn::cfg::CTR::GetLanguage(); - return s_SdWriter.WriteBufWithCmac(common::COUNTRY_SETTING_PATHNAME, &s_CountryLanguage, sizeof(s_CountryLanguage)); + common::SdReaderWriter sdWriter; + return sdWriter.WriteBufWithCmac(common::COUNTRY_SETTING_PATHNAME, &s_CountryLanguage, sizeof(s_CountryLanguage)); } return nn::ResultSuccess(); @@ -232,7 +234,8 @@ nn::Result WriteNorData() result = nn::cfg::nor::CTR::ReadNtrWifiSetting(0, s_NtrNorData.NtrWiFiSetting, common::NTR_WIFI_SETTING_SIZE); COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result); - return s_SdWriter.WriteBufWithCmac(common::NOR_PATHNAME, &s_NtrNorData, sizeof(common::NtrNorData)); + common::SdReaderWriter sdWriter; + return sdWriter.WriteBufWithCmac(common::NOR_PATHNAME, &s_NtrNorData, sizeof(common::NtrNorData)); } nn::Result WriteSerialNumber(common::HardwareStateManager& manager) @@ -243,7 +246,8 @@ nn::Result WriteSerialNumber(common::HardwareStateManager& manager) size_t size; manager.GetSerialNumber(&serial, &size); - return s_SdWriter.WriteBufWithCmac(common::SERIAL_PATHNAME, serial, size); + common::SdReaderWriter sdWriter; + return sdWriter.WriteBufWithCmac(common::SERIAL_PATHNAME, serial, size); } nn::Result WriteDeviceId(common::HardwareStateManager& manager) @@ -252,7 +256,8 @@ nn::Result WriteDeviceId(common::HardwareStateManager& manager) bit32 deviceId = manager.GetDeviceId(); - return s_SdWriter.WriteBufWithCmac(common::DEVICE_ID_PATHNAME, &deviceId, sizeof(deviceId)); + common::SdReaderWriter sdWriter; + return sdWriter.WriteBufWithCmac(common::DEVICE_ID_PATHNAME, &deviceId, sizeof(deviceId)); } nn::Result WriteIvs(common::HardwareStateManager& manager) @@ -277,7 +282,8 @@ nn::Result WriteIvs(common::HardwareStateManager& manager) swAesCtrContest.Initialize(common::iv, common::key, sizeof(common::key)); swAesCtrContest.Encrypt(enc, ivs, size); - return s_SdWriter.WriteBufWithCmac(common::IVS_PATHNAME, enc, size); + common::SdReaderWriter sdWriter; + return sdWriter.WriteBufWithCmac(common::IVS_PATHNAME, enc, size); } else { @@ -290,7 +296,8 @@ void CreateTwlDirectory(enum common::TWL_PATH_INDEX path) { NN_ASSERT(path < common::TWL_PATHNAME_MAX); - s_SdWriter.CreateDirectory((::std::wstring(common::SDMC_ROOT_DIRECTORY_PATH) + + common::SdReaderWriter sdWriter; + sdWriter.CreateDirectory((::std::wstring(common::SDMC_ROOT_DIRECTORY_PATH) + std::wstring(common::SD_TWL_ROOTNAME_TABLE[path])).c_str()); } @@ -364,7 +371,8 @@ void AddCurrentDirectory(std::vector* list, std::wstring c list->push_back(pathInfo); } - +// TWLセーブデータが存在するディレクトリの一覧をlistに追加する +// return: dataディレクトリが存在するかどうか bool ListTwlSaveDataDirectory(std::wstring currentDirectory, u32 level, std::vector* list, std::vector* programIdList) { @@ -373,6 +381,9 @@ bool ListTwlSaveDataDirectory(std::wstring currentDirectory, u32 level, std::vec nn::Result result; std::vector entryList; //カレントディレクトリのエントリ一覧を格納 std::vector::iterator entryIndex; + + // level 0 1 2 + // twln:/title/00030005/484e4441/data/ const u8 TWL_SAVEDATA_DIRECTORY_LEVEL = 2; // data ディレクトリまでの階層 const wchar_t* const TWL_SAVEDATA_DIRECTORY_NAME = L"data"; @@ -390,7 +401,7 @@ bool ListTwlSaveDataDirectory(std::wstring currentDirectory, u32 level, std::vec { dir.Finalize(); - bool retValue = false; + bool hasDataDirectory = false; for (entryIndex = entryList.begin(); entryIndex != entryList.end(); entryIndex++) { // レベル2未満のディレクトリなら再帰的に開く @@ -398,18 +409,17 @@ bool ListTwlSaveDataDirectory(std::wstring currentDirectory, u32 level, std::vec { if (entryIndex->attributes.isDirectory) { - if (ListTwlSaveDataDirectory( + if (!ListTwlSaveDataDirectory( currentDirectory + std::wstring(L"/") + std::wstring(entryIndex->entryName), level + 1, list, programIdList)) { - NN_LOG("%ls/%ls has data directory.\n", currentDirectory.c_str(), entryIndex->entryName); - retValue = true; - - AddCurrentDirectory(list, currentDirectory, entryIndex->entryName); + hasDataDirectory |= false; } else { - return false; + NN_LOG("%ls/%ls has data directory.\n", currentDirectory.c_str(), entryIndex->entryName); + AddCurrentDirectory(list, currentDirectory, entryIndex->entryName); + hasDataDirectory |= true; } } } @@ -419,15 +429,16 @@ bool ListTwlSaveDataDirectory(std::wstring currentDirectory, u32 level, std::vec if (std::wcscmp(entryIndex->entryName, TWL_SAVEDATA_DIRECTORY_NAME) == 0) { // ファイル一覧を取得する - retValue = true; if (!ListTwlSaveData( currentDirectory + std::wstring(L"/") + std::wstring(entryIndex->entryName), list)) { - return false; + hasDataDirectory |= false; } + NN_LOG("%ls/%ls has data directory.\n", currentDirectory.c_str(), entryIndex->entryName); AddCurrentDirectory(list, currentDirectory, entryIndex->entryName); AddCurrentProgramIdPath(programIdList, currentDirectory); + hasDataDirectory |= true; } } else @@ -436,12 +447,7 @@ bool ListTwlSaveDataDirectory(std::wstring currentDirectory, u32 level, std::vec } } - if (level != 0) - { - return retValue; - } - - break; + return hasDataDirectory; } else { @@ -449,8 +455,6 @@ bool ListTwlSaveDataDirectory(std::wstring currentDirectory, u32 level, std::vec entryList.push_back(entry); } } - - return true; } @@ -568,18 +572,17 @@ void WriteTwlSaveData() COMMON_LOGGER("Export Twl Save Data.\n"); // ディレクトリ作成 - result = s_SdWriter.CreateDirectory((::std::wstring(common::SDMC_ROOT_DIRECTORY_PATH) + + common::SdReaderWriter sdWriter; + result = sdWriter.CreateDirectory((::std::wstring(common::SDMC_ROOT_DIRECTORY_PATH) + std::wstring(common::SD_SAVEDATA_TWL_ROOT_NAME)).c_str()); COMMON_LOGGER_RETURN_VOID_SET_BOOL_IF_FAILED(result, s_IsExportSucceeded); // セーブデータを含むディレクトリ一覧を生成 result = nn::fs::MountSpecialArchive(common::NAND_TWL_ARCHIVE_NAME, nn::fs::CTR::ARCHIVE_TYPE_TWL_NAND); COMMON_LOGGER_RETURN_VOID_SET_BOOL_IF_FAILED(result, s_IsExportSucceeded); - ListTwlSaveDataDirectory(std::wstring(common::NAND_TWL_DATA_ROOT_PATHNAME_WITHOUT_SLASH), 0, &fileList, & programIdList); - - NN_LOG("No Twl Savedata\n"); - if(fileList.size() == 0) + if(!ListTwlSaveDataDirectory(std::wstring(common::NAND_TWL_DATA_ROOT_PATHNAME_WITHOUT_SLASH), 0, &fileList, & programIdList)) { + NN_LOG("No Twl Savedata\n"); s_IsExportSucceeded = true; return; } @@ -722,7 +725,8 @@ nn::Result WriteMcuRtcData(common::HardwareStateManager& manager) { NN_LOG("RTC = 20%02d/%02d/%02d %02d:%02d:%02d\n", rtc.m_Year, rtc.m_Month, rtc.m_Day, rtc.m_Hour, rtc.m_Minute, rtc.m_Second); - return s_SdWriter.WriteBufWithCmac(common::MCU_RTC_PATHNAME, &rtc, sizeof(rtc)); + common::SdReaderWriter sdWriter; + return sdWriter.WriteBufWithCmac(common::MCU_RTC_PATHNAME, &rtc, sizeof(rtc)); } nn::os::Thread::Sleep( nn::fnd::TimeSpan::FromMilliSeconds( @@ -822,7 +826,8 @@ nn::Result WriteSaveData(::std::string& sysSaveRoot) // セーブデータディレクトリ以下のデータをSDカードにコピー // コピー用ディレクトリ作成 - result = s_SdWriter.CreateDirectory((::std::wstring(common::SDMC_ROOT_DIRECTORY_PATH) + ::std::wstring( + common::SdReaderWriter sdWriter; + result = sdWriter.CreateDirectory((::std::wstring(common::SDMC_ROOT_DIRECTORY_PATH) + ::std::wstring( common::SD_SAVEDATA_ROOT_NAME)).c_str()); COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result); @@ -847,7 +852,8 @@ nn::Result WriteVersionData(common::HardwareStateManager& manager) common::VerDef versionData; manager.GetVersionData(&versionData); - return s_SdWriter.WriteBufWithCmac(common::VERSION_DATA_PATHNAME, &versionData, sizeof(common::VerDef)); + common::SdReaderWriter sdWriter; + return sdWriter.WriteBufWithCmac(common::VERSION_DATA_PATHNAME, &versionData, sizeof(common::VerDef)); } bool DeleteNimSaveData()