mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@123 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
parent
9204d5475d
commit
d51310a5a9
@ -1,228 +0,0 @@
|
|||||||
#include <wchar.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <nn/fs.h>
|
|
||||||
#include <nn/fs/fs_ResultPrivate.h>
|
|
||||||
#include "membak.h"
|
|
||||||
|
|
||||||
using namespace nn;
|
|
||||||
|
|
||||||
namespace
|
|
||||||
{
|
|
||||||
const size_t BUFFER_SIZE = 1024 * 1024;
|
|
||||||
bit8 s_Buffer[BUFFER_SIZE] NN_ATTRIBUTE_ALIGN(32);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool info_alive;
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
//コンストラクタ
|
|
||||||
MemBak::MemBak()
|
|
||||||
{
|
|
||||||
m_Exists = false;
|
|
||||||
m_pBuffer = s_Buffer;
|
|
||||||
m_pBufferPos = s_Buffer;
|
|
||||||
m_pBufferSize = sizeof(s_Buffer);
|
|
||||||
LastNnResult = ResultSuccess();
|
|
||||||
ResetPath();
|
|
||||||
|
|
||||||
info_alive = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MemBak::Finalize()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
//デストラクタ
|
|
||||||
MemBak::~MemBak()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// mount, unmount, create, delete
|
|
||||||
|
|
||||||
//拡張セーブデータ
|
|
||||||
//存在確認
|
|
||||||
bool MemBak::IsExist()
|
|
||||||
{
|
|
||||||
return m_Exists;
|
|
||||||
}
|
|
||||||
|
|
||||||
//セーブ作成、成功時はマウント状態
|
|
||||||
myResult MemBak::Create(const void* icon,size_t iconSize,u32 entryDir,u32 entryFile)
|
|
||||||
{
|
|
||||||
NN_UNUSED_VAR(icon);
|
|
||||||
NN_UNUSED_VAR(iconSize);
|
|
||||||
|
|
||||||
if ( m_IsMounted )
|
|
||||||
{
|
|
||||||
return RESULT_ALREADY_MOUNT;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_NumDirEntry = entryDir;
|
|
||||||
m_NumFileEntry = entryFile;
|
|
||||||
|
|
||||||
m_Exists = true;
|
|
||||||
m_IsMounted = true;
|
|
||||||
return RESULT_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
//削除
|
|
||||||
bool MemBak::Delete()
|
|
||||||
{
|
|
||||||
m_Exists = false;
|
|
||||||
info_alive = false;
|
|
||||||
m_pBufferPos = m_pBuffer;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//マウント
|
|
||||||
myResult MemBak::Mount()
|
|
||||||
{
|
|
||||||
if ( m_IsMounted )
|
|
||||||
{
|
|
||||||
return RESULT_ALREADY_MOUNT;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_IsMounted = true;
|
|
||||||
return RESULT_OK;
|
|
||||||
}
|
|
||||||
void MemBak::Unmount()
|
|
||||||
{
|
|
||||||
m_IsMounted = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// SetInfo, GetInfo
|
|
||||||
|
|
||||||
//アーカイブ情報の取得
|
|
||||||
bool MemBak::GetInfo(tArcInfo *pinfo)
|
|
||||||
{
|
|
||||||
if (info_alive==false)return false;
|
|
||||||
*pinfo = m_ArcInfo;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//管理用ファイル
|
|
||||||
//ライト属性で開く
|
|
||||||
bool MemBak::OpenSysW()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
//ライト属性ファイルを閉じる
|
|
||||||
void MemBak::CloseSysW()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
//システムファイルライト
|
|
||||||
bool MemBak::WriteSys(tArcInfo *pinfo)
|
|
||||||
{
|
|
||||||
info_alive = true;
|
|
||||||
pinfo->Ver = INFO_VERSION;
|
|
||||||
m_ArcInfo = *pinfo;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// Traverse
|
|
||||||
|
|
||||||
//パス検索位置のリセット
|
|
||||||
void MemBak::ResetPath()
|
|
||||||
{
|
|
||||||
m_pFind = reinterpret_cast<EntryHeader*>(m_pBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
myResult MemBak::GetPath(wchar_t *path)
|
|
||||||
{
|
|
||||||
if( m_pFind->IsEnd() )
|
|
||||||
{
|
|
||||||
path[0] = '\0';
|
|
||||||
return RESULT_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::wcscpy(path, m_pFind->GetName());
|
|
||||||
m_pFind = m_pFind->GetNext();
|
|
||||||
|
|
||||||
return RESULT_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// Write
|
|
||||||
|
|
||||||
//ライト属性ファイルを閉じる
|
|
||||||
void MemBak::CloseW()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
//ファイルライト
|
|
||||||
s32 MemBak::Write(char *buffer,size_t size)
|
|
||||||
{
|
|
||||||
return m_ForWrite.Write(buffer, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//ライト属性ファイルを開く
|
|
||||||
bool MemBak::OpenW(wchar_t *path,s64 size)
|
|
||||||
{
|
|
||||||
m_ForWrite.Init(reinterpret_cast<EntryHeader*>(m_pBufferPos));
|
|
||||||
m_ForWrite.Set(path, size);
|
|
||||||
m_pBufferPos = reinterpret_cast<bit8*>(m_ForWrite.GetNext());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// Read
|
|
||||||
|
|
||||||
//ファイルリード
|
|
||||||
s32 MemBak::Read(char *buffer,size_t size)
|
|
||||||
{
|
|
||||||
return m_ForRead.Read(buffer, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void MemBak::Close()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//ファイルを開く
|
|
||||||
//パス指定はルート以降
|
|
||||||
//(ex)data:/dir/file -> dir/file
|
|
||||||
bool MemBak::Open(wchar_t *path)
|
|
||||||
{
|
|
||||||
EntryHeader* pE = reinterpret_cast<EntryHeader*>(m_pBuffer);
|
|
||||||
|
|
||||||
while( ! pE->IsEnd() )
|
|
||||||
{
|
|
||||||
if( pE->Match(path) )
|
|
||||||
{
|
|
||||||
m_ForRead.Init(pE);
|
|
||||||
FileSize = m_ForRead.GetSize();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
pE = pE->GetNext();
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user