mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
クリーンアップ処理でサブバナーのCRCを破壊する処理を追加。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1183 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
afe6754808
commit
5081912251
@ -22,6 +22,7 @@
|
|||||||
#include <twl/fatfs.h>
|
#include <twl/fatfs.h>
|
||||||
#include <twl/os/common/format_rom.h>
|
#include <twl/os/common/format_rom.h>
|
||||||
#include <twl/nam.h>
|
#include <twl/nam.h>
|
||||||
|
#include <twl/os/common/banner.h>
|
||||||
#include <sysmenu/namut.h>
|
#include <sysmenu/namut.h>
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
@ -101,11 +102,10 @@ 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(void);
|
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_DeleteNandDirectory(const char *path);
|
||||||
static BOOL NAMUTi_FillFile(const char* path);
|
|
||||||
static BOOL NAMUTi_MountAndFormatOtherTitleSaveData(u64 titleID, const char *arcname);
|
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 BOOL NAMUTi_FillFile(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);
|
||||||
|
|
||||||
@ -334,6 +334,7 @@ static BOOL NAMUTi_ClearSavedataAll( void )
|
|||||||
NAMTitleInfo namTitleInfo;
|
NAMTitleInfo namTitleInfo;
|
||||||
char savePublicPath[ FS_ENTRY_LONGNAME_MAX ];
|
char savePublicPath[ FS_ENTRY_LONGNAME_MAX ];
|
||||||
char savePrivatePath[ FS_ENTRY_LONGNAME_MAX ];
|
char savePrivatePath[ FS_ENTRY_LONGNAME_MAX ];
|
||||||
|
char subBannerPath[ FS_ENTRY_LONGNAME_MAX ];
|
||||||
BOOL ret = TRUE;
|
BOOL ret = TRUE;
|
||||||
s32 i;
|
s32 i;
|
||||||
|
|
||||||
@ -357,15 +358,22 @@ static BOOL NAMUTi_ClearSavedataAll( void )
|
|||||||
// publicSaveSizeが0以上なら0xFFクリア&フォーマット
|
// publicSaveSizeが0以上なら0xFFクリア&フォーマット
|
||||||
if (namTitleInfo.publicSaveSize > 0)
|
if (namTitleInfo.publicSaveSize > 0)
|
||||||
{
|
{
|
||||||
ret &= NAMUTi_ClearSavedata(savePublicPath, namTitleInfo.titleId, FALSE);
|
ret &= NAMUTi_ClearSavedataPublic(savePublicPath, namTitleInfo.titleId);
|
||||||
}
|
}
|
||||||
// privateSaveSizeが0以上なら0xFFクリア&フォーマット
|
// privateSaveSizeが0以上なら0xFFクリア&フォーマット
|
||||||
if (namTitleInfo.privateSaveSize > 0)
|
if (namTitleInfo.privateSaveSize > 0)
|
||||||
{
|
{
|
||||||
ret &= NAMUTi_ClearSavedata(savePrivatePath, namTitleInfo.titleId, TRUE);
|
ret &= NAMUTi_ClearSavedataPrivate(savePrivatePath, namTitleInfo.titleId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { ret = FALSE; }
|
else { ret = FALSE; }
|
||||||
|
|
||||||
|
// サブバナーファイルパス取得
|
||||||
|
if (NAM_GetTitleBannerFilePath( subBannerPath, namTitleInfo.titleId) == NAM_OK)
|
||||||
|
{
|
||||||
|
NAMUTi_DestroySubBanner( subBannerPath );
|
||||||
|
}
|
||||||
|
else { ret = FALSE; }
|
||||||
}
|
}
|
||||||
else { ret = FALSE; }
|
else { ret = FALSE; }
|
||||||
}
|
}
|
||||||
@ -374,7 +382,7 @@ static BOOL NAMUTi_ClearSavedataAll( void )
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: NAMUTi_ClearSavedata
|
Name: NAMUTi_ClearSavedataPublic
|
||||||
|
|
||||||
Description: 指定したセーブデータファイルに対して
|
Description: 指定したセーブデータファイルに対して
|
||||||
FFクリア&フォーマットを行います。
|
FFクリア&フォーマットを行います。
|
||||||
@ -383,45 +391,98 @@ static BOOL NAMUTi_ClearSavedataAll( void )
|
|||||||
|
|
||||||
Returns: None
|
Returns: None
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
static BOOL NAMUTi_ClearSavedata(const char* path, u64 titleID, BOOL private)
|
BOOL NAMUTi_ClearSavedataPublic(const char* path, u64 titleID)
|
||||||
{
|
{
|
||||||
FSFile file;
|
//----- FFクリア
|
||||||
u32 filesize;
|
if (NAMUTi_FillFile(path) == FALSE)
|
||||||
BOOL ret;
|
|
||||||
|
|
||||||
// ファイル構造体初期化
|
|
||||||
FS_InitFile(&file);
|
|
||||||
|
|
||||||
// セーブファイルオープン
|
|
||||||
if (!FS_OpenFileEx(&file, path, (FS_FILEMODE_R|FS_FILEMODE_W)))
|
|
||||||
{
|
{
|
||||||
|
OS_Warning(" Fail NAMUTi_FillFile");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----- セーブファイルを0xFFでクリア
|
//----- NANDアプリのセーブデータファイルをマウントかつフォーマット
|
||||||
filesize = FS_GetFileLength(&file);
|
return NAMUTi_MountAndFormatOtherTitleSaveData(titleID, "otherPub");
|
||||||
for (; filesize > CLEAR_DATA_SIZE; filesize -= CLEAR_DATA_SIZE)
|
}
|
||||||
{
|
|
||||||
FS_WriteFile(&file, sClearData, CLEAR_DATA_SIZE);
|
|
||||||
}
|
|
||||||
FS_WriteFile(&file, sClearData, (s32)filesize);
|
|
||||||
|
|
||||||
// ファイルクローズ
|
/*---------------------------------------------------------------------------*
|
||||||
FS_CloseFile(&file);
|
Name: NAMUTi_ClearSavedataPrivate
|
||||||
|
|
||||||
|
Description: 指定したセーブデータファイルに対して
|
||||||
|
FFクリア&フォーマットを行います。
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
BOOL NAMUTi_ClearSavedataPrivate(const char* path, u64 titleID)
|
||||||
|
{
|
||||||
|
//----- FFクリア
|
||||||
|
if (NAMUTi_FillFile(path) == FALSE)
|
||||||
|
{
|
||||||
|
OS_Warning(" Fail NAMUTi_FillFile");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
//----- NANDアプリのセーブデータファイルをマウントかつフォーマット
|
//----- NANDアプリのセーブデータファイルをマウントかつフォーマット
|
||||||
|
return NAMUTi_MountAndFormatOtherTitleSaveData(titleID, "otherPrv");
|
||||||
|
}
|
||||||
|
|
||||||
// private
|
/*---------------------------------------------------------------------------*
|
||||||
if (private)
|
Name: NAMUTi_DestroySubBanner
|
||||||
|
|
||||||
|
Description: 指定したサブバナーのCRC破壊を試みます。
|
||||||
|
指定したサブバナーが存在しない可能性もありますが
|
||||||
|
その場合でもTRUEを返します。(コードはOS_DeleteSubBannerFileのパクリ)
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
BOOL NAMUTi_DestroySubBanner(const char* path)
|
||||||
|
{
|
||||||
|
TWLSubBannerFile buf[1]; // 4KBあるのでよくない。NAM関数のアロケータが使いたい・・
|
||||||
|
u16 crc, solt;
|
||||||
|
FSFile file[1];
|
||||||
|
BOOL ret = FALSE;
|
||||||
|
|
||||||
|
// R属性でファイルをオープンを試みてファイルの存在有無を確認する
|
||||||
|
// 存在しない場合はTRUEで返す
|
||||||
|
FS_InitFile(file);
|
||||||
|
if ( !FS_OpenFileEx(file, path, FS_FILEMODE_R) )
|
||||||
{
|
{
|
||||||
ret = NAMUTi_MountAndFormatOtherTitleSaveData(titleID, "otherPrv");
|
return TRUE;
|
||||||
}
|
}
|
||||||
// public
|
|
||||||
else
|
// RWL属性で開きなおす
|
||||||
|
FS_InitFile(file);
|
||||||
|
if ( !FS_OpenFileEx(file, path, FS_FILEMODE_RWL) )
|
||||||
{
|
{
|
||||||
ret = NAMUTi_MountAndFormatOtherTitleSaveData(titleID, "otherPub");
|
OS_TPrintf("OS_DeleteSubBannerFile : banner file open failed.\n");
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CRCを改竄して書き戻す
|
||||||
|
if( FS_ReadFile( file, buf, sizeof(TWLSubBannerFile) ) != -1 )
|
||||||
|
{
|
||||||
|
crc = SVC_GetCRC16( 0xffff, &buf->anime, sizeof(BannerAnime) );
|
||||||
|
solt = 1;
|
||||||
|
crc += solt;
|
||||||
|
buf->h.crc16_anime = crc;
|
||||||
|
FS_SeekFile( file, 0, FS_SEEK_SET );
|
||||||
|
if( sizeof(BannerHeader) == FS_WriteFile(file, &buf->h, sizeof(BannerHeader)) )
|
||||||
|
{
|
||||||
|
OS_TPrintf("OS_DeleteSubBannerFile : banner file write succeed.\n");
|
||||||
|
ret = TRUE;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
OS_TPrintf("OS_DeleteSubBannerFile : banner file write failed.\n");
|
||||||
|
}
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
OS_TPrintf("OS_DeleteSubBannerFile : banner file read failed.\n");
|
||||||
|
}
|
||||||
|
FS_CloseFile(file);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -486,7 +547,7 @@ static BOOL NAMUTi_FillFile(const char* path)
|
|||||||
FS_InitFile(&file);
|
FS_InitFile(&file);
|
||||||
|
|
||||||
// ファイルオープン
|
// ファイルオープン
|
||||||
if (FS_OpenFileEx(&file, path, (FS_FILEMODE_R|FS_FILEMODE_W)))
|
if (FS_OpenFileEx(&file, path, (FS_FILEMODE_RWL)))
|
||||||
{
|
{
|
||||||
// ファイルを0xFFでクリア
|
// ファイルを0xFFでクリア
|
||||||
u32 filesize = FS_GetFileLength(&file);
|
u32 filesize = FS_GetFileLength(&file);
|
||||||
@ -499,7 +560,6 @@ static BOOL NAMUTi_FillFile(const char* path)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
OS_TWarning("Fail! FS_OpenFileEx(%s)\n", path);
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|||||||
@ -58,6 +58,42 @@ u32 NAMUT_SearchInstalledSoftBoxCount( void );
|
|||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void NAMUT_DrawNandTree(void);
|
void NAMUT_DrawNandTree(void);
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: NAMUTi_ClearSavedataPublic
|
||||||
|
|
||||||
|
Description: 指定したセーブデータファイルに対して
|
||||||
|
FFクリア&フォーマットを行います。
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
BOOL NAMUTi_ClearSavedataPublic(const char* path, u64 titleID);
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: NAMUTi_ClearSavedataPrivate
|
||||||
|
|
||||||
|
Description: 指定したセーブデータファイルに対して
|
||||||
|
FFクリア&フォーマットを行います。
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
BOOL NAMUTi_ClearSavedataPrivate(const char* path, u64 titleID);
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: NAMUTi_DestroySubBanner
|
||||||
|
|
||||||
|
Description: 指定したサブバナーのCRC破壊を試みます。
|
||||||
|
指定したサブバナーが存在しない可能性もありますが
|
||||||
|
その場合でもTRUEを返します。(コードはOS_DeleteSubBannerFileのパクリ)
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
BOOL NAMUTi_DestroySubBanner(const char* path);
|
||||||
|
|
||||||
#endif // SDK_ARM9
|
#endif // SDK_ARM9
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user