From 17aa45442823d4fc3e8af44544cff45cc01ac613 Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@b08762b0-b915-fc4b-9d8c-17b2551a87ff> Date: Mon, 25 Aug 2008 09:32:20 +0000 Subject: [PATCH] =?UTF-8?q?NAMUT=5FDeleteNandTmpDirectory()=20=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= 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@2261 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../libraries_sysmenu/namut/ARM9/src/namut.c | 964 ++++++++++-------- 1 file changed, 518 insertions(+), 446 deletions(-) diff --git a/build/libraries_sysmenu/namut/ARM9/src/namut.c b/build/libraries_sysmenu/namut/ARM9/src/namut.c index 25230e22..6f170e10 100644 --- a/build/libraries_sysmenu/namut/ARM9/src/namut.c +++ b/build/libraries_sysmenu/namut/ARM9/src/namut.c @@ -43,23 +43,23 @@ // 指定ディレクトリ自体は残ります。 static const char* sDeleteDirectoryList[] = { - "nand:/import", - "nand:/progress", - "nand2:/photo", - "nand:/tmp" + "nand:/import", + "nand:/progress", + "nand2:/photo", + "nand:/tmp" }; // 本体初期化(NAND初期化)実行時に // 指定ファイルはランダムデータでFillされます。 static const char* sFillFileList[] = { - "nand:/shared1/TWLCFG0.dat", - "nand:/shared1/TWLCFG1.dat", - "nand:/shared2/launcher/wrap.bin" + "nand:/shared1/TWLCFG0.dat", + "nand:/shared1/TWLCFG1.dat", + "nand:/shared2/launcher/wrap.bin" }; -#define VOLUME_INITIAL_VALUE 5 // 本体初期化時に設定する本体ボリューム値 -#define BACKLIGHT_INITIAL_VALUE 3 // 本体初期化時に設定するバックライト輝度 +#define VOLUME_INITIAL_VALUE 5 // 本体初期化時に設定する本体ボリューム値 +#define BACKLIGHT_INITIAL_VALUE 3 // 本体初期化時に設定するバックライト輝度 #define NAMUT_SHARE_ARCHIVE_MAX 6 // shareデータ個数 /*---------------------------------------------------------------------------* @@ -118,73 +118,73 @@ void NAMUT_Init(NAMUTAlloc allocFunc, NAMUTFree freeFunc) *---------------------------------------------------------------------------*/ BOOL NAMUT_Format(void) { - int i; - BOOL ret = TRUE; + int i; + BOOL ret = TRUE; - // プロテクトされていないタイトルの削除を行います - if (!NAMUTi_DeleteNonprotectedTitle()) - { - ret = FALSE; - OS_TWarning("Fail! NAMUTi_DeleteNonprotectedTitle()\n"); - } + // プロテクトされていないタイトルの削除を行います + if (!NAMUTi_DeleteNonprotectedTitle()) + { + ret = FALSE; + OS_TWarning("Fail! NAMUTi_DeleteNonprotectedTitle()\n"); + } - // プロテクトタイトルのセーブデータを初期化します - if (!NAMUTi_ClearSavedataAll()) - { - ret = FALSE; - OS_TWarning("Fail! NAMUTi_ClearSavedataAll()\n"); - } + // プロテクトタイトルのセーブデータを初期化します + if (!NAMUTi_ClearSavedataAll()) + { + ret = FALSE; + OS_TWarning("Fail! NAMUTi_ClearSavedataAll()\n"); + } - // shareデータを初期化します - if (!NAMUTi_InitShareData()) - { - ret = FALSE; - OS_TWarning("Fail! NAMUTi_InitShareData()\n"); - } + // shareデータを初期化します + if (!NAMUTi_InitShareData()) + { + ret = FALSE; + OS_TWarning("Fail! NAMUTi_InitShareData()\n"); + } - // 指定ファイルを乱数でクリアします - for (i=0; i 0) - { - ret &= NAMUTi_ClearSavedataPublic(savePublicPath, namTitleInfo.titleId); - } - // privateSaveSizeが0以上なら乱数クリア&フォーマット - if (namTitleInfo.privateSaveSize > 0) - { - ret &= NAMUTi_ClearSavedataPrivate(savePrivatePath, namTitleInfo.titleId); - } - } - else { ret = FALSE; } + for (i=0;i 0) + { + ret &= NAMUTi_ClearSavedataPublic(savePublicPath, namTitleInfo.titleId); + } + // privateSaveSizeが0以上なら乱数クリア&フォーマット + if (namTitleInfo.privateSaveSize > 0) + { + ret &= NAMUTi_ClearSavedataPrivate(savePrivatePath, namTitleInfo.titleId); + } + } + else { ret = FALSE; } - // サブバナーファイルパス取得 - if (NAM_GetTitleBannerFilePath( subBannerPath, namTitleInfo.titleId) == NAM_OK) - { - NAMUTi_DestroySubBanner( subBannerPath ); - } - else { ret = FALSE; } - } - else { ret = FALSE; } - } + // サブバナーファイルパス取得 + if (NAM_GetTitleBannerFilePath( subBannerPath, namTitleInfo.titleId) == NAM_OK) + { + NAMUTi_DestroySubBanner( subBannerPath ); + } + else { ret = FALSE; } + } + else { ret = FALSE; } + } - return ret; + return ret; } /*---------------------------------------------------------------------------* Name: NAMUTi_ClearSavedataPublic Description: 指定したセーブデータファイルに対して - 乱数クリア&フォーマットを行います。 + 乱数クリア&フォーマットを行います。 Arguments: None @@ -432,22 +504,22 @@ static BOOL NAMUTi_ClearSavedataAll( void ) *---------------------------------------------------------------------------*/ BOOL NAMUTi_ClearSavedataPublic(const char* path, u64 titleID) { - //----- 乱数クリア - if (NAMUTi_RandClearFile(path) == FALSE) - { - OS_Warning(" Fail NAMUTi_RandClearFile"); - return FALSE; - } + //----- 乱数クリア + if (NAMUTi_RandClearFile(path) == FALSE) + { + OS_Warning(" Fail NAMUTi_RandClearFile"); + return FALSE; + } - //----- NANDアプリのセーブデータファイルをマウントかつフォーマット - return NAMUTi_MountAndFormatOtherTitleSaveData(titleID, "otherPub"); + //----- NANDアプリのセーブデータファイルをマウントかつフォーマット + return NAMUTi_MountAndFormatOtherTitleSaveData(titleID, "otherPub"); } /*---------------------------------------------------------------------------* Name: NAMUTi_ClearSavedataPrivate Description: 指定したセーブデータファイルに対して - 乱数クリア&フォーマットを行います。 + 乱数クリア&フォーマットを行います。 Arguments: None @@ -455,23 +527,23 @@ BOOL NAMUTi_ClearSavedataPublic(const char* path, u64 titleID) *---------------------------------------------------------------------------*/ BOOL NAMUTi_ClearSavedataPrivate(const char* path, u64 titleID) { - //----- 乱数クリア - if (NAMUTi_RandClearFile(path) == FALSE) - { - OS_Warning(" Fail NAMUTi_RandClearFile"); - return FALSE; - } + //----- 乱数クリア + if (NAMUTi_RandClearFile(path) == FALSE) + { + OS_Warning(" Fail NAMUTi_RandClearFile"); + return FALSE; + } - //----- NANDアプリのセーブデータファイルをマウントかつフォーマット - return NAMUTi_MountAndFormatOtherTitleSaveData(titleID, "otherPrv"); + //----- NANDアプリのセーブデータファイルをマウントかつフォーマット + return NAMUTi_MountAndFormatOtherTitleSaveData(titleID, "otherPrv"); } /*---------------------------------------------------------------------------* Name: NAMUTi_DestroySubBanner Description: 指定したサブバナーのCRC破壊を試みます。 - 指定したサブバナーが存在しない可能性もありますが - その場合でもTRUEを返します。(コードはOS_DeleteSubBannerFileのパクリ) + 指定したサブバナーが存在しない可能性もありますが + その場合でもTRUEを返します。(コードはOS_DeleteSubBannerFileのパクリ) Arguments: None @@ -479,58 +551,58 @@ BOOL NAMUTi_ClearSavedataPrivate(const char* path, u64 titleID) *---------------------------------------------------------------------------*/ BOOL NAMUTi_DestroySubBanner(const char* path) { - TWLSubBannerFile* pBanner; - u16 crc, solt; - FSFile file[1]; - BOOL ret = FALSE; + TWLSubBannerFile* pBanner; + u16 crc, solt; + FSFile file[1]; + BOOL ret = FALSE; - // R属性でファイルをオープンを試みてファイルの存在有無を確認する - // 存在しない場合はTRUEで返す - FS_InitFile(file); - if ( !FS_OpenFileEx(file, path, FS_FILEMODE_R) ) - { - return TRUE; - } + // R属性でファイルをオープンを試みてファイルの存在有無を確認する + // 存在しない場合はTRUEで返す + FS_InitFile(file); + if ( !FS_OpenFileEx(file, path, FS_FILEMODE_R) ) + { + return TRUE; + } - pBanner = NAMUT_Alloc( sizeof(TWLSubBannerFile) ); - if (!pBanner) - { + pBanner = NAMUT_Alloc( sizeof(TWLSubBannerFile) ); + if (!pBanner) + { OS_TWarning("Allocation failed. (%d)\n"); - return FALSE; - } + return FALSE; + } - // RWL属性で開く - FS_InitFile(file); - if ( !FS_OpenFileEx(file, path, FS_FILEMODE_RWL) ) - { - OS_Warning("banner file open failed.\n"); - NAMUT_Free( pBanner ); - return FALSE; - } + // RWL属性で開く + FS_InitFile(file); + if ( !FS_OpenFileEx(file, path, FS_FILEMODE_RWL) ) + { + OS_Warning("banner file open failed.\n"); + NAMUT_Free( pBanner ); + return FALSE; + } - // CRCを改竄して書き戻す - if( FS_ReadFile( file, pBanner, sizeof(TWLSubBannerFile) ) != -1 ) - { - crc = SVC_GetCRC16( 0xffff, &pBanner->anime, sizeof(BannerAnime) ); - solt = 1; - crc += solt; - pBanner->h.crc16_anime = crc; - FS_SeekFile( file, 0, FS_SEEK_SET ); - if( sizeof(BannerHeader) == FS_WriteFile(file, &pBanner->h, sizeof(BannerHeader)) ) - { - ret = TRUE; - }else - { - OS_Warning("banner file write failed.\n"); - } - }else - { - OS_Warning("banner file read failed.\n"); - } - FS_CloseFile(file); - - NAMUT_Free( pBanner ); - return ret; + // CRCを改竄して書き戻す + if( FS_ReadFile( file, pBanner, sizeof(TWLSubBannerFile) ) != -1 ) + { + crc = SVC_GetCRC16( 0xffff, &pBanner->anime, sizeof(BannerAnime) ); + solt = 1; + crc += solt; + pBanner->h.crc16_anime = crc; + FS_SeekFile( file, 0, FS_SEEK_SET ); + if( sizeof(BannerHeader) == FS_WriteFile(file, &pBanner->h, sizeof(BannerHeader)) ) + { + ret = TRUE; + }else + { + OS_Warning("banner file write failed.\n"); + } + }else + { + OS_Warning("banner file read failed.\n"); + } + FS_CloseFile(file); + + NAMUT_Free( pBanner ); + return ret; } /*---------------------------------------------------------------------------* @@ -547,14 +619,14 @@ static BOOL NAMUTi_MountAndFormatOtherTitleSaveData(u64 titleID, const char *arc { BOOL succeeded = FALSE; FSFATFSArchiveWork* pWork; - FSResult result; + FSResult result; - pWork = NAMUT_Alloc( sizeof(FSFATFSArchiveWork) ); - if (!pWork) - { + pWork = NAMUT_Alloc( sizeof(FSFATFSArchiveWork) ); + if (!pWork) + { OS_TWarning("Allocation failed. (%d)\n"); - return FALSE; - } + return FALSE; + } // マウント試行。 result = FSi_MountSpecialArchive(titleID, arcname, pWork); @@ -603,52 +675,52 @@ static BOOL NAMUTi_InitShareData(void) BOOL succeeded = TRUE; FSFATFSArchiveWork* pWork; char path[NAM_PATH_LEN]; - FSResult result; - int i; + FSResult result; + int i; - pWork = NAMUT_Alloc( sizeof(FSFATFSArchiveWork) ); - if (!pWork) - { + pWork = NAMUT_Alloc( sizeof(FSFATFSArchiveWork) ); + if (!pWork) + { OS_TWarning("Allocation failed. (%d)\n"); - return FALSE; - } + return FALSE; + } - for (i=0;i CLEAR_DATA_SIZE; filesize -= CLEAR_DATA_SIZE) - { - if( AES_Rand(pClearData, CLEAR_DATA_SIZE) != AES_RESULT_SUCCESS ) - { - FS_CloseFile(&file); + for (filesize = FS_GetFileLength(&file); filesize > CLEAR_DATA_SIZE; filesize -= CLEAR_DATA_SIZE) + { + if( AES_Rand(pClearData, CLEAR_DATA_SIZE) != AES_RESULT_SUCCESS ) + { + FS_CloseFile(&file); NAMUT_Free( pClearData ); - return FALSE; - } - FS_WriteFile(&file, pClearData, CLEAR_DATA_SIZE); - } + return FALSE; + } + FS_WriteFile(&file, pClearData, CLEAR_DATA_SIZE); + } - if (filesize > 0) - { - if( AES_Rand(pClearData, filesize) != AES_RESULT_SUCCESS ) - { - FS_CloseFile(&file); - NAMUT_Free( pClearData ); - return FALSE; - } - FS_WriteFile(&file, pClearData, (s32)filesize); - } - FS_CloseFile(&file); + if (filesize > 0) + { + if( AES_Rand(pClearData, filesize) != AES_RESULT_SUCCESS ) + { + FS_CloseFile(&file); + NAMUT_Free( pClearData ); + return FALSE; + } + FS_WriteFile(&file, pClearData, (s32)filesize); + } + FS_CloseFile(&file); NAMUT_Free( pClearData ); - } - else - { - return FALSE; - } - return TRUE; + } + else + { + return FALSE; + } + return TRUE; } /*---------------------------------------------------------------------------* @@ -722,18 +794,18 @@ static BOOL NAMUTi_RandClearFile(const char* path) 指定された変数に格納します。 Arguments: installed : installedカウント格納変数 - free : freeカウント格納変数 + free : freeカウント格納変数 Returns: 成功ならTRUE *---------------------------------------------------------------------------*/ BOOL NAMUT_GetSoftBoxCount( u8* installed, u8* free ) { - u32 installedSoftBoxCount; + u32 installedSoftBoxCount; - // installedSoftBoxCountの取得 - if ( NAM_OK != NAM_GetInstalledSoftBoxCount( &installedSoftBoxCount ) ) { - return FALSE; - } + // installedSoftBoxCountの取得 + if ( NAM_OK != NAM_GetInstalledSoftBoxCount( &installedSoftBoxCount ) ) { + return FALSE; + } // installed count *installed = (u8)installedSoftBoxCount; @@ -741,14 +813,14 @@ BOOL NAMUT_GetSoftBoxCount( u8* installed, u8* free ) // free count *free = (u8)(LCFG_TWL_FREE_SOFT_BOX_COUNT_MAX - installedSoftBoxCount); - return TRUE; + return TRUE; } /*---------------------------------------------------------------------------* Name: NAMUT_UpdateSoftBoxCount Description: InstalledSoftBoxCount, FreeSoftBoxCount の値を - 現在のNANDの状態に合わせて更新します。 + 現在のNANDの状態に合わせて更新します。 Arguments: None. @@ -756,30 +828,30 @@ BOOL NAMUT_GetSoftBoxCount( u8* installed, u8* free ) *---------------------------------------------------------------------------*/ BOOL NAMUT_UpdateSoftBoxCount( void ) { - u8 installedSoftBoxCount; - u8 freeSoftBoxCount; - u8 *pBuffer; - BOOL retval = TRUE; + u8 installedSoftBoxCount; + u8 freeSoftBoxCount; + u8 *pBuffer; + BOOL retval = TRUE; - // InstalledSoftBoxCount, FreeSoftBoxCount を数えなおす - if (!NAMUT_GetSoftBoxCount(&installedSoftBoxCount, &freeSoftBoxCount)) - { - return FALSE; - } + // InstalledSoftBoxCount, FreeSoftBoxCount を数えなおす + if (!NAMUT_GetSoftBoxCount(&installedSoftBoxCount, &freeSoftBoxCount)) + { + return FALSE; + } - // LCFGライブラリの静的変数に対する更新 - LCFG_TSD_SetInstalledSoftBoxCount( installedSoftBoxCount ); + // LCFGライブラリの静的変数に対する更新 + LCFG_TSD_SetInstalledSoftBoxCount( installedSoftBoxCount ); LCFG_TSD_SetFreeSoftBoxCount( freeSoftBoxCount ); - // LCFGライブラリの静的変数の値をNANDに反映 + // LCFGライブラリの静的変数の値をNANDに反映 pBuffer = NAMUT_Alloc( LCFG_WRITE_TEMP ); - if (!pBuffer) { return FALSE; } - // ミラーリングデータの両方に書き込みを行う。 - retval &= LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer ); - retval &= LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer ); + if (!pBuffer) { return FALSE; } + // ミラーリングデータの両方に書き込みを行う。 + retval &= LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer ); + retval &= LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer ); NAMUT_Free( pBuffer ); - return retval; + return retval; } /*---------------------------------------------------------------------------* @@ -793,34 +865,34 @@ BOOL NAMUT_UpdateSoftBoxCount( void ) *---------------------------------------------------------------------------*/ BOOL NAMUT_ClearTWLSettings( BOOL doWriteback ) { - BOOL retval = TRUE; - - // 本体設定データのクリア。TPキャリブレーションデータは残す。 - { - LCFGTWLTPCalibData calib; - u32 installedSoftBoxCount; + BOOL retval = TRUE; + + // 本体設定データのクリア。TPキャリブレーションデータは残す。 + { + LCFGTWLTPCalibData calib; + u32 installedSoftBoxCount; - // installedSoftBoxCountの取得 - if ( NAM_OK != NAM_GetInstalledSoftBoxCount( &installedSoftBoxCount ) ) { - return FALSE; - } + // installedSoftBoxCountの取得 + if ( NAM_OK != NAM_GetInstalledSoftBoxCount( &installedSoftBoxCount ) ) { + return FALSE; + } - LCFG_TSD_GetTPCalibration( &calib ); - LCFG_ClearTWLSettings( (u8)installedSoftBoxCount ); - LCFG_TSD_SetTPCalibration( &calib ); - } + LCFG_TSD_GetTPCalibration( &calib ); + LCFG_ClearTWLSettings( (u8)installedSoftBoxCount ); + LCFG_TSD_SetTPCalibration( &calib ); + } - // LCFGライブラリの静的変数の値をNANDに反映 - if( doWriteback ) { - u8 *pBuffer = NAMUT_Alloc( LCFG_WRITE_TEMP ); - if (!pBuffer) { return FALSE; } - // ミラーリングデータの両方に書き込みを行う。 - retval &= LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer ); - retval &= LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer ); - NAMUT_Free( pBuffer ); - } + // LCFGライブラリの静的変数の値をNANDに反映 + if( doWriteback ) { + u8 *pBuffer = NAMUT_Alloc( LCFG_WRITE_TEMP ); + if (!pBuffer) { return FALSE; } + // ミラーリングデータの両方に書き込みを行う。 + retval &= LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer ); + retval &= LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer ); + NAMUT_Free( pBuffer ); + } - return retval; + return retval; } /*---------------------------------------------------------------------------* @@ -834,30 +906,30 @@ BOOL NAMUT_ClearTWLSettings( BOOL doWriteback ) *---------------------------------------------------------------------------*/ static void NAMUTi_ClearWiFiSettings( void ) { -#define NCFG_ADDR 0x20 -#define NTR_WIFI_DATA_SIZE 0x400 -#define TWL_WIFI_DATA_SIZE 0x600 - u32 total_size = ( NTR_WIFI_DATA_SIZE + TWL_WIFI_DATA_SIZE ); - u8* pClearData = NAMUT_Alloc( total_size ); - if (!pClearData) - { +#define NCFG_ADDR 0x20 +#define NTR_WIFI_DATA_SIZE 0x400 +#define TWL_WIFI_DATA_SIZE 0x600 + u32 total_size = ( NTR_WIFI_DATA_SIZE + TWL_WIFI_DATA_SIZE ); + u8* pClearData = NAMUT_Alloc( total_size ); + if (!pClearData) + { OS_TWarning("Allocation failed. (%d)\n"); - return; - } + return; + } if (!NVRAMi_IsInitialized()) { NVRAMi_Init(); } DC_FlushRange( &sNCFGAddr, 2 ); - sNCFGAddr = 0; + sNCFGAddr = 0; NVRAMi_Read( NCFG_ADDR, 2, (u8 *)&sNCFGAddr); - sNCFGAddr = (u32)( ( sNCFGAddr << 3 ) - ( NTR_WIFI_DATA_SIZE + TWL_WIFI_DATA_SIZE ) ); - - MI_CpuFillFast( pClearData, 0xffffffff, total_size); + sNCFGAddr = (u32)( ( sNCFGAddr << 3 ) - ( NTR_WIFI_DATA_SIZE + TWL_WIFI_DATA_SIZE ) ); + + MI_CpuFillFast( pClearData, 0xffffffff, total_size); DC_FlushRange( pClearData, total_size ); NVRAMi_Write( sNCFGAddr, total_size , pClearData ); - NAMUT_Free( pClearData ); + NAMUT_Free( pClearData ); } /*---------------------------------------------------------------------------* @@ -871,9 +943,9 @@ static void NAMUTi_ClearWiFiSettings( void ) *---------------------------------------------------------------------------*/ static void* NAMUT_Alloc(u32 size) { - const u32 allocSize = MATH_ROUNDUP32(size); - SDK_ASSERTMSG( spAllocFunc != NULL, "NAMUT_Init should be called previously.\n"); - return spAllocFunc(allocSize); + const u32 allocSize = MATH_ROUNDUP32(size); + SDK_ASSERTMSG( spAllocFunc != NULL, "NAMUT_Init should be called previously.\n"); + return spAllocFunc(allocSize); } /*---------------------------------------------------------------------------* @@ -887,9 +959,9 @@ static void* NAMUT_Alloc(u32 size) *---------------------------------------------------------------------------*/ static void NAMUT_Free(void* buffer) { - SDK_ASSERTMSG( spFreeFunc != NULL, "NAMUT_Init should be called previously.\n"); - if (buffer) - { - spFreeFunc(buffer); - } + SDK_ASSERTMSG( spFreeFunc != NULL, "NAMUT_Init should be called previously.\n"); + if (buffer) + { + spFreeFunc(buffer); + } }