mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-03-12 14:46:49 +01:00
VolumeDirectory: fix issues with Read() that broke non-apploader mode
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4693 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
e9891684ca
commit
c46b289b2e
@ -33,7 +33,8 @@ static const u32 MAX_NAME_LENGTH = 0x3df;
|
|||||||
static u64 FST_ADDRESS = 0x440;
|
static u64 FST_ADDRESS = 0x440;
|
||||||
static u64 DOL_ADDRESS = 0;
|
static u64 DOL_ADDRESS = 0;
|
||||||
|
|
||||||
CVolumeDirectory::CVolumeDirectory(const std::string& _rDirectory, bool _bIsWii, const std::string& _rApploader, const std::string& _rDOL)
|
CVolumeDirectory::CVolumeDirectory(const std::string& _rDirectory, bool _bIsWii,
|
||||||
|
const std::string& _rApploader, const std::string& _rDOL)
|
||||||
: m_apploaderSize(0)
|
: m_apploaderSize(0)
|
||||||
, m_apploader(NULL)
|
, m_apploader(NULL)
|
||||||
, m_DOLSize(0)
|
, m_DOLSize(0)
|
||||||
@ -46,8 +47,8 @@ CVolumeDirectory::CVolumeDirectory(const std::string& _rDirectory, bool _bIsWii,
|
|||||||
m_rootDirectory = ExtractDirectoryName(_rDirectory);
|
m_rootDirectory = ExtractDirectoryName(_rDirectory);
|
||||||
|
|
||||||
// create the default disk header
|
// create the default disk header
|
||||||
m_diskHeader = new u8[FST_ADDRESS];
|
m_diskHeader = new u8[DISKHEADERINFO_ADDRESS];
|
||||||
memset(m_diskHeader, 0, (size_t)FST_ADDRESS);
|
memset(m_diskHeader, 0, (size_t)DISKHEADERINFO_ADDRESS);
|
||||||
SetUniqueID("RZDE01");
|
SetUniqueID("RZDE01");
|
||||||
SetName("Default name");
|
SetName("Default name");
|
||||||
|
|
||||||
@ -104,31 +105,26 @@ bool CVolumeDirectory::Read(u64 _Offset, u64 _Length, u8* _pBuffer) const
|
|||||||
if(_Offset < DISKHEADERINFO_ADDRESS)
|
if(_Offset < DISKHEADERINFO_ADDRESS)
|
||||||
{
|
{
|
||||||
WriteToBuffer(DISKHEADER_ADDRESS, DISKHEADERINFO_ADDRESS, m_diskHeader, _Offset, _Length, _pBuffer);
|
WriteToBuffer(DISKHEADER_ADDRESS, DISKHEADERINFO_ADDRESS, m_diskHeader, _Offset, _Length, _pBuffer);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
// header info
|
// header info
|
||||||
if(_Offset < APPLOADER_ADDRESS)
|
if(_Offset >= DISKHEADERINFO_ADDRESS && _Offset < APPLOADER_ADDRESS)
|
||||||
{
|
{
|
||||||
WriteToBuffer(DISKHEADERINFO_ADDRESS, sizeof(m_diskHeaderInfo), (u8*)m_diskHeaderInfo, _Offset, _Length, _pBuffer);
|
WriteToBuffer(DISKHEADERINFO_ADDRESS, sizeof(m_diskHeaderInfo), (u8*)m_diskHeaderInfo, _Offset, _Length, _pBuffer);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
// apploader
|
// apploader
|
||||||
if(_Offset >= APPLOADER_ADDRESS && _Offset <= APPLOADER_ADDRESS + m_apploaderSize)
|
if(_Offset >= APPLOADER_ADDRESS && _Offset < APPLOADER_ADDRESS + m_apploaderSize)
|
||||||
{
|
{
|
||||||
WriteToBuffer(APPLOADER_ADDRESS, m_apploaderSize, m_apploader, _Offset, _Length, _pBuffer);
|
WriteToBuffer(APPLOADER_ADDRESS, m_apploaderSize, m_apploader, _Offset, _Length, _pBuffer);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
// dol
|
// dol
|
||||||
if(_Offset >= DOL_ADDRESS && _Offset <= DOL_ADDRESS + m_DOLSize)
|
if(_Offset >= DOL_ADDRESS && _Offset < DOL_ADDRESS + m_DOLSize)
|
||||||
{
|
{
|
||||||
WriteToBuffer(DOL_ADDRESS, m_DOLSize, m_DOL, _Offset, _Length, _pBuffer);
|
WriteToBuffer(DOL_ADDRESS, m_DOLSize, m_DOL, _Offset, _Length, _pBuffer);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
// fst
|
// fst
|
||||||
if(_Offset < m_dataStartAddress)
|
if(_Offset >= FST_ADDRESS && _Offset < m_dataStartAddress)
|
||||||
{
|
{
|
||||||
WriteToBuffer(FST_ADDRESS, m_fstSize, m_FSTData, _Offset, _Length, _pBuffer);
|
WriteToBuffer(FST_ADDRESS, m_fstSize, m_FSTData, _Offset, _Length, _pBuffer);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_virtualDisk.size() == 0)
|
if(m_virtualDisk.size() == 0)
|
||||||
@ -307,7 +303,11 @@ bool CVolumeDirectory::SetApploader(const std::string& _rApploader)
|
|||||||
if (!_rApploader.empty())
|
if (!_rApploader.empty())
|
||||||
{
|
{
|
||||||
std::string data;
|
std::string data;
|
||||||
File::ReadFileToString(false, _rApploader.c_str(), data);
|
if (!File::ReadFileToString(false, _rApploader.c_str(), data))
|
||||||
|
{
|
||||||
|
PanicAlert("Apploader unable to load from file");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
m_apploaderSize = 0x20 + Common::swap32(*(u32*)&data.data()[0x14]) + Common::swap32(*(u32*)&data.data()[0x18]);
|
m_apploaderSize = 0x20 + Common::swap32(*(u32*)&data.data()[0x14]) + Common::swap32(*(u32*)&data.data()[0x18]);
|
||||||
if (m_apploaderSize != data.size())
|
if (m_apploaderSize != data.size())
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user