From fb67b2efe5d181e1490697ae54579114a636f1b8 Mon Sep 17 00:00:00 2001 From: kamikawa Date: Tue, 1 Apr 2008 04:15:56 +0000 Subject: [PATCH] =?UTF-8?q?NandInitializer*=20=E3=81=A7=E3=81=AE=E3=82=AF?= =?UTF-8?q?=E3=83=AA=E3=83=BC=E3=83=B3=E3=82=A2=E3=83=83=E3=83=97=E5=AE=9F?= =?UTF-8?q?=E8=A1=8C=E6=99=82=E3=81=AB=20public.sav=20=E5=8F=8A=E3=81=B3?= =?UTF-8?q?=20private.sav=20=E3=82=92=EF=BD=86=EF=BD=86=E3=82=AF=E3=83=AA?= =?UTF-8?q?=E3=82=A2=E3=81=97=E3=81=A6=E5=86=8D=E3=83=95=E3=82=A9=E3=83=BC?= =?UTF-8?q?=E3=83=9E=E3=83=83=E3=83=88=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1021 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../libraries_sysmenu/namut/ARM9/src/namut.c | 131 ++++++++++-------- 1 file changed, 74 insertions(+), 57 deletions(-) diff --git a/build/libraries_sysmenu/namut/ARM9/src/namut.c b/build/libraries_sysmenu/namut/ARM9/src/namut.c index d97ba7eb..ebb8f9f8 100644 --- a/build/libraries_sysmenu/namut/ARM9/src/namut.c +++ b/build/libraries_sysmenu/namut/ARM9/src/namut.c @@ -98,10 +98,11 @@ static char sCurrentFullPath[FS_ENTRY_LONGNAME_MAX]; static BOOL NAMUTi_DeleteNonprotectedTitle(void); static BOOL NAMUTi_DeleteNonprotectedTitleEntity(const char* path); -static BOOL NAMUTi_ClearSavedataAll(BOOL fill); -static BOOL NAMUTi_ClearSavedata(const char* path, BOOL fill); +static BOOL NAMUTi_ClearSavedataAll(void); +static BOOL NAMUTi_ClearSavedata(const char* path, u64 titleID, BOOL private); static BOOL NAMUTi_DeleteNandDirectory(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 PrintDirectory(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; OS_TWarning("Fail! NAMUTi_ClearSavedataAll()\n"); @@ -314,12 +315,12 @@ static BOOL NAMUTi_DeleteNonprotectedTitleEntity(const char* path) Description: 全セーブデータのFFクリア&フォーマットを行います - Arguments: fill : FFクリアを行うならTRUEを指定します + Arguments: None Returns: None *---------------------------------------------------------------------------*/ -static BOOL NAMUTi_ClearSavedataAll(BOOL fill) +static BOOL NAMUTi_ClearSavedataAll( void ) { s32 title_num; NAMTitleInfo namTitleInfo; @@ -348,12 +349,12 @@ static BOOL NAMUTi_ClearSavedataAll(BOOL fill) // publicSaveSizeが0以上なら0xFFクリア&フォーマット if (namTitleInfo.publicSaveSize > 0) { - ret &= NAMUTi_ClearSavedata(savePublicPath, fill); + ret &= NAMUTi_ClearSavedata(savePublicPath, namTitleInfo.titleId, FALSE); } // privateSaveSizeが0以上なら0xFFクリア&フォーマット if (namTitleInfo.privateSaveSize > 0) { - ret &= NAMUTi_ClearSavedata(savePrivatePath, fill); + ret &= NAMUTi_ClearSavedata(savePrivatePath, namTitleInfo.titleId, TRUE); } } else { ret = FALSE; } @@ -370,80 +371,96 @@ static BOOL NAMUTi_ClearSavedataAll(BOOL fill) Description: 指定したセーブデータファイルに対して FFクリア&フォーマットを行います。 - Arguments: fill : FFクリアを行うならTRUEを指定します + Arguments: 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; - BOOL ret = FALSE; + u32 filesize; + BOOL ret; // ファイル構造体初期化 FS_InitFile(&file); - // セーブファイルオープン if (!FS_OpenFileEx(&file, path, (FS_FILEMODE_R|FS_FILEMODE_W))) { return FALSE; } -/* - // 月曜にセーブデータに対してマウントする関数ができるのでそれ待ち - - // セーブファイルを0xFFでクリア - if (fill) + //----- セーブファイルを0xFFでクリア + filesize = FS_GetFileLength(&file); + for (; filesize > CLEAR_DATA_SIZE; filesize -= CLEAR_DATA_SIZE) { - u32 filesize = FS_GetFileLength(&file); - 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, CLEAR_DATA_SIZE); } - - - // セーブファイルに対してマウント - 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_WriteFile(&file, sClearData, (s32)filesize); // ファイルクローズ FS_CloseFile(&file); + //----- NANDアプリのセーブデータファイルをマウントかつフォーマット + + // private + if (private) + { + ret = NAMUTi_MountAndFormatOtherTitleSaveData(titleID, "otherPrv"); + } + // public + else + { + ret = NAMUTi_MountAndFormatOtherTitleSaveData(titleID, "otherPub"); + } + 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