diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp b/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp index 61b4e0c..48b1bfd 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp @@ -103,6 +103,11 @@ bool HasValidRtcData() return !s_CheckSdOnlyMode && !s_NupOnlyMode && !s_GetIvsOnlyMode && !s_DownloadPreinstallMode; } +bool HasDeviceIdFile() +{ + return HasValidRtcData(); +} + typedef enum RestoreState { STARTUP, // 初期値 @@ -392,17 +397,24 @@ void CheckAccountDeleted(common::HardwareStateManager& manager, common::Operatio } else { - // 同一本体下記書き戻しの場合はアカウント削除しない - if(EqualsDeviceIdFileandDeviceId(manager).IsSuccess()) + if(HasDeviceIdFile()) { - // IVS専用モードならばIVSを取得させる - if(s_GetIvsOnlyMode) + if (ExistsDeviceIdFile().IsFailure()) { - CheckDownloadIvs(manager, message, goNextStep); + // 異常なのでFAIL + COMMON_LOGGER("Can't Read Device Id!!"); + s_RestoreState = FAIL; + return; + } + + // 同一本体下記書き戻しの場合はアカウント削除しない + if (EqualsDeviceIdFileandDeviceId(manager)) + { + CheckAccountTransfered(manager, message, goNextStep); } else { - CheckAccountTransfered(manager, message, goNextStep); + s_RestoreState = WAIT_START_DELETE_ACCOUNT; } } else diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/Importer.cpp b/trunk/ConsoleDataMigration/sources/ConsoleRestore/Importer.cpp index bb6fad7..d8b1f11 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/Importer.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/Importer.cpp @@ -73,7 +73,6 @@ TimeZone s_TimeZone; const size_t NTP_SERVER_NAME_LENGTH = 256; char s_NtpServerName[NTP_SERVER_NAME_LENGTH]; -bool s_CheckedEqualsDeviceIdFileandDeviceId = false; bool s_CheckedEqualsRegionDataandRegion = false; bool s_ReadSerialNumber = false; @@ -260,15 +259,24 @@ nn::Result ReadSerialNumber(u8* serial) return result; } -nn::Result EqualsDeviceIdFileandDeviceId(common::HardwareStateManager& manager) +nn::Result ExistsDeviceIdFile() { - static nn::Result result = nn::ResultSuccess(); - - if(s_CheckedEqualsDeviceIdFileandDeviceId) + common::SdReaderWriter sdReader; + size_t totalSize; + size_t bufSize = 1024; + common::HeapManager heap(bufSize); + void* buf = heap.GetAddr(); + if(buf == NULL) { - return result; + return nn::Result(nn::Result::LEVEL_FATAL, nn::Result::SUMMARY_OUT_OF_RESOURCE, nn::Result::MODULE_COMMON, + nn::Result::DESCRIPTION_OUT_OF_MEMORY); } + + return sdReader.ReadBufWithCmac(common::DEVICE_ID_PATHNAME, buf, bufSize, &totalSize); +} +bool EqualsDeviceIdFileandDeviceId(common::HardwareStateManager& manager) +{ COMMON_LOGGER("Check Device Id\n"); bit32 sdDeviceId; @@ -277,32 +285,16 @@ nn::Result EqualsDeviceIdFileandDeviceId(common::HardwareStateManager& manager) size_t bufSize = 1024; common::HeapManager heap(bufSize); void* buf = heap.GetAddr(); - if (buf != NULL) + if (buf == NULL) { - result = sdReader.ReadBufWithCmac(common::DEVICE_ID_PATHNAME, buf, bufSize, &totalSize); - if (result.IsSuccess()) - { - s_CheckedEqualsDeviceIdFileandDeviceId = true; - std::memcpy(&sdDeviceId, buf, sizeof(sdDeviceId)); - - if (manager.GetDeviceId() == sdDeviceId) - { - result = nn::ResultSuccess(); - } - else - { - result = nn::Result(nn::Result::LEVEL_STATUS, nn::Result::SUMMARY_INVALID_RESULT_VALUE, - nn::Result::MODULE_COMMON, nn::Result::DESCRIPTION_INVALID_RESULT_VALUE); - } - } + return false; } - else - { - result = nn::Result(nn::Result::LEVEL_FATAL, nn::Result::SUMMARY_OUT_OF_RESOURCE, nn::Result::MODULE_COMMON, - nn::Result::DESCRIPTION_OUT_OF_MEMORY); - } - - return result; + + COMMON_LOGGER_RETURN_FALSE_IF_FAILED( + sdReader.ReadBufWithCmac(common::DEVICE_ID_PATHNAME, buf, bufSize, &totalSize)); + + std::memcpy(&sdDeviceId, buf, sizeof(sdDeviceId)); + return (manager.GetDeviceId() == sdDeviceId); } nn::Result EqualsRegionDataandRegion() @@ -1624,7 +1616,6 @@ void ImportTwlSaveData() void ClearFileReadResult() { - s_CheckedEqualsDeviceIdFileandDeviceId = false; s_CheckedEqualsRegionDataandRegion = false; s_ReadSerialNumber = false; } diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/Importer.h b/trunk/ConsoleDataMigration/sources/ConsoleRestore/Importer.h index 868a5b0..0f2d782 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/Importer.h +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/Importer.h @@ -25,8 +25,11 @@ namespace ConsoleRestore { +// SDカードのデバイスIDファイルが存在するか +nn::Result ExistsDeviceIdFile(); + // SDカードのデバイスIDファイルと本体のデバイスIDが一致しているかどうか -nn::Result EqualsDeviceIdFileandDeviceId(common::HardwareStateManager& manager); +bool EqualsDeviceIdFileandDeviceId(common::HardwareStateManager& manager); // SDカードのリージョンと本体のリージョンが一致しているかどうか nn::Result EqualsRegionDataandRegion();