NandInitializer* でのクリーンアップ実行時に public.sav 及び private.sav をffクリアして再フォーマットするようにしました。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1021 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
kamikawa 2008-04-01 04:15:56 +00:00
parent 176c41ed91
commit fb67b2efe5

View File

@ -98,10 +98,11 @@ static char sCurrentFullPath[FS_ENTRY_LONGNAME_MAX];
static BOOL NAMUTi_DeleteNonprotectedTitle(void); static BOOL NAMUTi_DeleteNonprotectedTitle(void);
static BOOL NAMUTi_DeleteNonprotectedTitleEntity(const char* path); static BOOL NAMUTi_DeleteNonprotectedTitleEntity(const char* path);
static BOOL NAMUTi_ClearSavedataAll(BOOL fill); static BOOL NAMUTi_ClearSavedataAll(void);
static BOOL NAMUTi_ClearSavedata(const char* path, BOOL fill); static BOOL NAMUTi_ClearSavedata(const char* path, u64 titleID, BOOL private);
static BOOL NAMUTi_DeleteNandDirectory(const char *path); static BOOL NAMUTi_DeleteNandDirectory(const char *path);
static BOOL NAMUTi_FillFile(const char* path); static BOOL NAMUTi_FillFile(const char* path);
static BOOL NAMUTi_MountAndFormatOtherTitleSaveData(u64 titleID, const char *arcname);
static void NAMUTi_DrawNandTree(s32 depth, const char *path); static void NAMUTi_DrawNandTree(s32 depth, const char *path);
static void PrintDirectory(s32 depth, const char* path); static void PrintDirectory(s32 depth, const char* path);
static void PrintFile(s32 depth, const char* path); static void PrintFile(s32 depth, const char* path);
@ -129,7 +130,7 @@ BOOL NAMUT_Format(void)
} }
// プロテクトタイトルのセーブデータをフォーマットします // プロテクトタイトルのセーブデータをフォーマットします
if (!NAMUTi_ClearSavedataAll(TRUE)) if (!NAMUTi_ClearSavedataAll())
{ {
ret = FALSE; ret = FALSE;
OS_TWarning("Fail! NAMUTi_ClearSavedataAll()\n"); OS_TWarning("Fail! NAMUTi_ClearSavedataAll()\n");
@ -314,12 +315,12 @@ static BOOL NAMUTi_DeleteNonprotectedTitleEntity(const char* path)
Description: Description:
Arguments: fill : FFクリアを行うならTRUEを指定します Arguments: None
Returns: None Returns: None
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
static BOOL NAMUTi_ClearSavedataAll(BOOL fill) static BOOL NAMUTi_ClearSavedataAll( void )
{ {
s32 title_num; s32 title_num;
NAMTitleInfo namTitleInfo; NAMTitleInfo namTitleInfo;
@ -348,12 +349,12 @@ static BOOL NAMUTi_ClearSavedataAll(BOOL fill)
// publicSaveSizeが0以上なら0xFFクリアフォーマット // publicSaveSizeが0以上なら0xFFクリアフォーマット
if (namTitleInfo.publicSaveSize > 0) if (namTitleInfo.publicSaveSize > 0)
{ {
ret &= NAMUTi_ClearSavedata(savePublicPath, fill); ret &= NAMUTi_ClearSavedata(savePublicPath, namTitleInfo.titleId, FALSE);
} }
// privateSaveSizeが0以上なら0xFFクリアフォーマット // privateSaveSizeが0以上なら0xFFクリアフォーマット
if (namTitleInfo.privateSaveSize > 0) if (namTitleInfo.privateSaveSize > 0)
{ {
ret &= NAMUTi_ClearSavedata(savePrivatePath, fill); ret &= NAMUTi_ClearSavedata(savePrivatePath, namTitleInfo.titleId, TRUE);
} }
} }
else { ret = FALSE; } else { ret = FALSE; }
@ -370,80 +371,96 @@ static BOOL NAMUTi_ClearSavedataAll(BOOL fill)
Description: Description:
Arguments: fill : FFクリアを行うならTRUEを指定します Arguments: None
Returns: None Returns: None
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
static BOOL NAMUTi_ClearSavedata(const char* path, BOOL fill) static BOOL NAMUTi_ClearSavedata(const char* path, u64 titleID, BOOL private)
{ {
char drive[2] = { 'Z', '\0' };
FSFile file; FSFile file;
BOOL ret = FALSE; u32 filesize;
BOOL ret;
// ファイル構造体初期化 // ファイル構造体初期化
FS_InitFile(&file); FS_InitFile(&file);
// セーブファイルオープン // セーブファイルオープン
if (!FS_OpenFileEx(&file, path, (FS_FILEMODE_R|FS_FILEMODE_W))) if (!FS_OpenFileEx(&file, path, (FS_FILEMODE_R|FS_FILEMODE_W)))
{ {
return FALSE; return FALSE;
} }
/* //----- セーブファイルを0xFFでクリア
// 月曜にセーブデータに対してマウントする関数ができるのでそれ待ち filesize = FS_GetFileLength(&file);
for (; filesize > CLEAR_DATA_SIZE; filesize -= CLEAR_DATA_SIZE)
// セーブファイルを0xFFでクリア
if (fill)
{ {
u32 filesize = FS_GetFileLength(&file); FS_WriteFile(&file, sClearData, CLEAR_DATA_SIZE);
for (; filesize > CLEAR_DATA_SIZE; filesize -= CLEAR_DATA_SIZE)
{
FS_WriteFile(&file, sClearData, CLEAR_DATA_SIZE);
}
FS_WriteFile(&file, sClearData, (s32)filesize);
} }
FS_WriteFile(&file, sClearData, (s32)filesize);
// セーブファイルに対してマウント
for (drive[0]='Z'; drive[0]>='A'; drive[0]--)
{
if (FATFS_MountDrive(drive, FATFS_MEDIA_TYPE_SUBNAND, (FATFSFileHandle)file.userdata))
{
break;
}
}
// マウント成功ならフォーマットする
if (drive[0] >= 'A')
{
char drive_colon[3];
drive_colon[0] = drive[0];
drive_colon[1] = ':';
drive_colon[2] = '\0';
// メディアフォーマット
if (FATFSi_FormatMedia(drive_colon))
{
// ドライブフォーマット
if (FATFS_FormatDrive(drive_colon))
{
ret = TRUE;
}
}
// アンマウント
FATFS_UnmountDrive(drive);
}
*/
ret = TRUE;
// ファイルクローズ // ファイルクローズ
FS_CloseFile(&file); FS_CloseFile(&file);
//----- NANDアプリのセーブデータファイルをマウントかつフォーマット
// private
if (private)
{
ret = NAMUTi_MountAndFormatOtherTitleSaveData(titleID, "otherPrv");
}
// public
else
{
ret = NAMUTi_MountAndFormatOtherTitleSaveData(titleID, "otherPub");
}
return ret; return ret;
} }
/*---------------------------------------------------------------------------*
Name: NAMUTi_MountAndFormatOtherTitleSaveData
Description: NANDアプリのセーブデータファイルをマウントかつフォーマット
Arguments: titleID : ID
arcname : "otherPub""otherPriv"NULL
Returns: TRUE
*---------------------------------------------------------------------------*/
static BOOL NAMUTi_MountAndFormatOtherTitleSaveData(u64 titleID, const char *arcname)
{
BOOL succeeded = FALSE;
// マウント試行。
FSResult result = FS_MountOtherTitleArchive(titleID, arcname);
if (result != FS_RESULT_SUCCESS)
{
OS_TWarning("FS_MountOtherTitleArchive failed. (%d)\n", result);
}
else
{
// 成功したらフォーマット試行。
char path[FS_ENTRY_LONGNAME_MAX];
(void)STD_TSPrintf(path, "%s:/", arcname);
if (!FATFSi_FormatMedia(path))
{
OS_TWarning("FATFSi_FormatMedia failed. (%d)\n", FATFS_GetLastError());
}
else if (!FATFS_FormatDrive(path))
{
OS_TWarning("FATFS_FormatDrive failed. (%d)\n", FATFS_GetLastError());
}
else
{
succeeded = TRUE;
}
// ドライブ情報をダンプ。
// DumpArchiveResource(path);
// アンマウント。
(void)FS_MountOtherTitleArchive(titleID, NULL);
}
return succeeded;
}
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: NAMUTi_FillFile Name: NAMUTi_FillFile