trunk r505のマージ

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@507 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
N2614 2011-11-14 06:09:07 +00:00
parent 99a7305dfa
commit 31a210c020
2 changed files with 35 additions and 17 deletions

View File

@ -35,7 +35,7 @@ SavedataCheckerBase::~SavedataCheckerBase()
NN_LOG("m_TotalReadSize = %lld\n", m_TotalReadSize);
}
nn::Result SavedataCheckerBase::CleanUpFilesRecursively(bool* modified, std::string baseName,
nn::Result SavedataCheckerBase::CleanUpFilesRecursively(bool* metaDataCrashed, bool* modified, std::string baseName,
std::wstring currentDirectory, bool erase)
{
nn::fs::Directory dir;
@ -52,11 +52,7 @@ nn::Result SavedataCheckerBase::CleanUpFilesRecursively(bool* modified, std::str
COMMON_LOGGER_RESULT_IF_FAILED(result);
if (erase)
{
COMMON_LOGGER_WARN(
"Deleting: %s%/s\n", baseName.c_str(), common::GetCharStr(GetFilePathWithoutArchive(currentDirectory).c_str()));
result = nn::fs::TryDeleteDirectory(currentDirectory.c_str());
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
*modified = true;
*metaDataCrashed = true;
}
return result;
}
@ -74,11 +70,7 @@ nn::Result SavedataCheckerBase::CleanUpFilesRecursively(bool* modified, std::str
COMMON_LOGGER_RESULT_IF_FAILED(result);
if (erase)
{
COMMON_LOGGER_WARN(
"Deleting: %s/%s\n", baseName.c_str(), common::GetCharStr(GetFilePathWithoutArchive(currentDirectory).c_str()));
result = nn::fs::TryDeleteDirectoryRecursively(currentDirectory.c_str());
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
*modified = true;
*metaDataCrashed = true;
}
// ディレクトリの読み取りエラーなので再度読み取ってもエラーになる
return result;
@ -99,7 +91,7 @@ nn::Result SavedataCheckerBase::CleanUpFilesRecursively(bool* modified, std::str
// ディレクトリの場合
if (entry.attributes.isDirectory)
{
result = CleanUpFilesRecursively(modified, baseName,
result = CleanUpFilesRecursively(metaDataCrashed, modified, baseName,
currentDirectory + std::wstring(entry.entryName) + std::wstring(L"/"), erase);
if(erase && result.IsFailure())
{
@ -292,10 +284,12 @@ nn::Result SystemSavedataChecker::CleanUp(bool erase)
{
nn::Result result;
bool modified = false;
std::wstring currentDirectory;
for (s32 i = 0; i < SYSTEM_SAVE_DATA_NUM; i++)
{
bool metaDataCrashed = false;
bool modified = false;
// SPIDERのスキップ
if(SYSTEM_SAVEDATA_COUPLE_LIST[i].id == 0x00020088 ||
SYSTEM_SAVEDATA_COUPLE_LIST[i].id == 0x0002009d ||
@ -328,7 +322,18 @@ nn::Result SystemSavedataChecker::CleanUp(bool erase)
{
NN_LOG("Mount %s\n", SYSTEM_SAVEDATA_COUPLE_LIST[i].name.c_str());
// ファイルを個別にチェックする
result = CleanUpFilesRecursively(&modified, SYSTEM_SAVEDATA_COUPLE_LIST[i].name.c_str(), L"ssave:/", erase);
result = CleanUpFilesRecursively(&metaDataCrashed, &modified, SYSTEM_SAVEDATA_COUPLE_LIST[i].name.c_str(), L"ssave:/", erase);
// メタデータエラーの場合は一旦アンマウントしてからアーカイブごと削除
if (erase && metaDataCrashed)
{
// 削除する
COMMON_LOGGER_WARN( "Deleting: %s/\n", SYSTEM_SAVEDATA_COUPLE_LIST[i].name.c_str());
result = nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME);
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
result = nn::fs::DeleteSystemSaveData(SYSTEM_SAVEDATA_COUPLE_LIST[i].id);
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
continue;
}
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
if(modified)
@ -392,9 +397,11 @@ nn::Result SharedExtSavedataChecker::CleanUp(bool erase)
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
NN_LOG_DEBUG("ExtData num = %d\n", numId);
bool modified = false;
for (s32 i = 0; i < numId; i++ )
{
bool metaDataCrashed = false;
bool modified = false;
char baseName[10];
nn::nstd::TSNPrintf(baseName, sizeof(baseName), "%X", IdArray[i]);
result = nn::fs::MountSharedExtSaveData(SHARED_EXT_SAVEDATA_ARCHIVE_NAME, IdArray[i]);
@ -403,7 +410,17 @@ nn::Result SharedExtSavedataChecker::CleanUp(bool erase)
NN_LOG("Mount %x\n", IdArray[i]);
// アーカイブ内のファイル・ディレクトリをチェックする
result = CleanUpFilesRecursively(&modified, baseName, L"shext:/", erase);
result = CleanUpFilesRecursively(&metaDataCrashed, &modified, baseName, L"shext:/", erase);
// メタデータが壊れていた場合はアンマウントしてから削除する
if(erase && metaDataCrashed)
{
COMMON_LOGGER_WARN("Deleting %x/\n", IdArray[i]);
result = nn::fs::Unmount(SHARED_EXT_SAVEDATA_ARCHIVE_NAME);
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
result = nn::fs::DeleteSharedExtSaveData(IdArray[i]);
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
continue;
}
COMMON_LOGGER_RETURN_RESULT_IF_FAILED(result);
result = nn::fs::Unmount(SHARED_EXT_SAVEDATA_ARCHIVE_NAME);

View File

@ -139,11 +139,12 @@ public:
protected:
//! @brief ファイルとディレクトリを再帰的にチェックする。エラーがあれば削除する
//! @param[out] metaDataCrashed メタデータが壊れていたかどうか。アーカイブごと削除するかどうかの判断に使用する
//! @param[out] modified ファイルかディレクトリを削除したかどうか。Commitするかどうかの判断に使用する
//! @param[in] baseName 削除するセーブデータの区別に表示するための名前
//! @param[in] currentDirectory チェックを開始するディレクトリ。スラッシュで終端すること
//! @param[in] erase ファイルかディレクトリを削除するかどうか
nn::Result CleanUpFilesRecursively(bool* modified, std::string baseName, std::wstring currentDirectory,
nn::Result CleanUpFilesRecursively(bool* metaDataCrashed, bool* modified, std::string baseName, std::wstring currentDirectory,
bool erase);
//! @brief ファイルサイズを取得する