diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp b/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp index 81ce40b..4dfa455 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include "Controller.h" #include "FileChecker.h" @@ -886,7 +887,7 @@ nn::Result ExecSyncMcuRtc(common::HardwareStateManager& manager) return result; } -bool SetUpProgramIdListBasedOnPersonalizedTicket(nn::ProgramId* list, s32* personalizedTicketNum) +bool SetUpProgramIdListBasedOnPersonalizedTicket(nn::ProgramId** list, s32* personalizedTicketNum) { const size_t MAX_TICKET_NUM = 2000; common::HeapManager ticketBuffer(sizeof(nn::am::TicketInfo) * MAX_TICKET_NUM); @@ -895,27 +896,28 @@ bool SetUpProgramIdListBasedOnPersonalizedTicket(nn::ProgramId* list, s32* perso return false; } + COMMON_LOGGER_RETURN_FALSE_IF_FAILED( + nn::am::InitializeForNetworkImporter()); + nn::am::TicketInfo* ticketInfo = new (ticketBuffer.GetAddr()) nn::am::TicketInfo[MAX_TICKET_NUM]; + COMMON_LOGGER_RETURN_FALSE_IF_NULL(ticketInfo); - nn::Result result = nn::am::GetPersonalizedTicketInfoList(personalizedTicketNum, ticketInfo, MAX_TICKET_NUM); - if(result.IsFailure()) - { - COMMON_LOGGER_RESULT(result, __func__) - return false; - } - list = reinterpret_cast(common::GetAllocator()->Allocate( + COMMON_LOGGER_RETURN_FALSE_IF_FAILED( + nn::am::GetPersonalizedTicketInfoList(personalizedTicketNum, ticketInfo, MAX_TICKET_NUM)); + + *list = reinterpret_cast(common::GetAllocator()->Allocate( sizeof(nn::ProgramId) * (*personalizedTicketNum), nn::fnd::ExpHeap::DEFAULT_ALIGNMENT)); - if(!list) - { - return false; - } + COMMON_LOGGER_RETURN_FALSE_IF_NULL(*list); for (s32 i = 0; i < *personalizedTicketNum; i++) { - list[i] = ticketInfo[i].titleId; + *list[i] = ticketInfo[i].titleId; } + COMMON_LOGGER_RETURN_FALSE_IF_FAILED( + nn::am::FinalizeForNetworkImporter()); + return true; } @@ -1552,7 +1554,7 @@ void ControlState(common::HardwareStateManager& manager, common::OperationMessag case RESTORE_PREORDER_TITLE: { s32 personalizedTicketNum; - if(!SetUpProgramIdListBasedOnPersonalizedTicket(sp_ProgramId, &personalizedTicketNum)) + if(!SetUpProgramIdListBasedOnPersonalizedTicket(&sp_ProgramId, &personalizedTicketNum)) { s_RestoreState = FAIL; break; @@ -1593,7 +1595,7 @@ void ControlState(common::HardwareStateManager& manager, common::OperationMessag case PREINSTALL_RESTORE_PREORDER_TITLE: { s32 personalizedTicketNum; - if(!SetUpProgramIdListBasedOnPersonalizedTicket(sp_ProgramId, &personalizedTicketNum)) + if(!SetUpProgramIdListBasedOnPersonalizedTicket(&sp_ProgramId, &personalizedTicketNum)) { s_RestoreState = FAIL; break; diff --git a/trunk/ConsoleDataMigration/sources/common/CommonLogger.h b/trunk/ConsoleDataMigration/sources/common/CommonLogger.h index 99c26ca..f2933a3 100644 --- a/trunk/ConsoleDataMigration/sources/common/CommonLogger.h +++ b/trunk/ConsoleDataMigration/sources/common/CommonLogger.h @@ -86,6 +86,16 @@ } \ }while(0) +#define COMMON_LOGGER_RETURN_FALSE_IF_NULL(ptr) \ + do \ + { \ + if(!ptr) \ + { \ + COMMON_LOGGER("ptr == NULL, %d, %s", __LINE__, __func__); \ + return false; \ + } \ + }while(0) + #define COMMON_LOGGER_RETURN_VOID_IF_FAILED(result) \ do \ { \