mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@777 385bec56-5757-e545-9c3a-d8741f4650f1
107 lines
2.5 KiB
C++
107 lines
2.5 KiB
C++
/*---------------------------------------------------------------------------*
|
|
Project: Horizon
|
|
File: Checker.cpp
|
|
|
|
Copyright 2009 Nintendo. 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 "common_Types.h"
|
|
#include "CommonLogger.h"
|
|
#include "HeapManager.h"
|
|
#include "SaveDataChecker.h"
|
|
#include <nn/drivers/aes/CTR/ARM946ES/driverAes_Types.h>
|
|
|
|
namespace ConsoleBackup
|
|
{
|
|
|
|
namespace
|
|
{
|
|
|
|
const size_t CHECKER_STACK_SIZE = 0x4000;
|
|
nn::os::Thread s_CheckerThread;
|
|
nn::os::StackBuffer<CHECKER_STACK_SIZE> s_CheckerThreadStackSize;
|
|
nn::Result s_CheckerResult;
|
|
NandSavedataChecker* s_pChecker;
|
|
bool s_CheckErrorOccured = false;
|
|
|
|
}
|
|
|
|
s32 GetCheckSaveDataProgress()
|
|
{
|
|
if(s_pChecker != NULL)
|
|
{
|
|
return s_pChecker->GetProgress();
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
}
|
|
|
|
void CheckSaveDataThreadFunc(bool erase)
|
|
{
|
|
size_t bufSize = common::GetAllocatableSize();
|
|
if(bufSize > common::FILE_COPY_HEAP_SIZE)
|
|
{
|
|
bufSize = common::FILE_COPY_HEAP_SIZE;
|
|
}
|
|
common::HeapManager heap(bufSize);
|
|
if (heap.GetAddr() != NULL)
|
|
{
|
|
s_pChecker = new NandSavedataChecker(heap.GetAddr(), bufSize);
|
|
s_CheckerResult = s_pChecker->CleanUp(erase);
|
|
}
|
|
else
|
|
{
|
|
s_CheckerResult = nn::Result(nn::Result::LEVEL_FATAL, nn::Result::SUMMARY_OUT_OF_RESOURCE,
|
|
nn::Result::MODULE_COMMON, nn::Result::DESCRIPTION_OUT_OF_MEMORY);
|
|
|
|
}
|
|
}
|
|
|
|
void StartSaveDataCheck(bool erase)
|
|
{
|
|
s_CheckerThread.Start(CheckSaveDataThreadFunc, erase, s_CheckerThreadStackSize);
|
|
}
|
|
|
|
bool IsCheckSaveDataFinished()
|
|
{
|
|
return s_CheckerThread.IsValid() && !s_CheckerThread.IsAlive();
|
|
}
|
|
|
|
void FinalizeSaveDataCheck()
|
|
{
|
|
s_CheckerThread.Join();
|
|
s_CheckerThread.Finalize();
|
|
|
|
if(s_pChecker != NULL)
|
|
{
|
|
s_CheckErrorOccured = s_pChecker->GetCheckErrorOccured();
|
|
delete s_pChecker;
|
|
}
|
|
}
|
|
|
|
bool CheckSaveDataErrorOccured()
|
|
{
|
|
return s_CheckErrorOccured;
|
|
}
|
|
|
|
bool CheckSaveDataSucceeded()
|
|
{
|
|
COMMON_LOGGER_RETURN_FALSE_IF_FAILED(s_CheckerResult);
|
|
return s_CheckerResult.IsSuccess();
|
|
}
|
|
|
|
}
|
|
|