DiskIO: Clean up GetTMD() API.

This commit is contained in:
magumagu 2014-06-15 21:27:23 -07:00 committed by JosJuice
parent b1df4e5986
commit 4bb48d09dd
5 changed files with 20 additions and 15 deletions

View File

@ -225,14 +225,12 @@ bool CBoot::BootUp()
DVDInterface::SetDiscInside(VolumeHandler::IsValid()); DVDInterface::SetDiscInside(VolumeHandler::IsValid());
u32 _TMDsz = 0x208; u32 tmd_size;
u8* _pTMD = new u8[_TMDsz]; std::unique_ptr<u8[]> tmd_buf = pVolume->GetTMD(&tmd_size);
pVolume->GetTMD(_pTMD, &_TMDsz); if (tmd_size)
if (_TMDsz)
{ {
WII_IPC_HLE_Interface::ES_DIVerify(_pTMD, _TMDsz); WII_IPC_HLE_Interface::ES_DIVerify(tmd_buf.get(), tmd_size);
} }
delete []_pTMD;
_StartupPara.bWii = VolumeHandler::IsWii(); _StartupPara.bWii = VolumeHandler::IsWii();

View File

@ -3,6 +3,7 @@
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include <cinttypes> #include <cinttypes>
#include <memory>
#include "Common/CommonTypes.h" #include "Common/CommonTypes.h"
#include "Common/Logging/LogManager.h" #include "Common/Logging/LogManager.h"
@ -113,11 +114,10 @@ bool CWII_IPC_HLE_Device_di::IOCtlV(u32 _CommandAddress)
INFO_LOG(WII_IPC_DVD, "DVDLowOpenPartition: partition_offset 0x%016" PRIx64, partition_offset); INFO_LOG(WII_IPC_DVD, "DVDLowOpenPartition: partition_offset 0x%016" PRIx64, partition_offset);
// Read TMD to the buffer // Read TMD to the buffer
u8 pTMD[0x800]; u32 tmd_size;
u32 tmdSz; std::unique_ptr<u8[]> tmd_buf = VolumeHandler::GetVolume()->GetTMD(&tmd_size);
VolumeHandler::GetVolume()->GetTMD(pTMD, &tmdSz); Memory::CopyToEmu(CommandBuffer.PayloadBuffer[0].m_Address, tmd_buf.get(), tmd_size);
Memory::CopyToEmu(CommandBuffer.PayloadBuffer[0].m_Address, pTMD, tmdSz); WII_IPC_HLE_Interface::ES_DIVerify(tmd_buf.get(), tmd_size);
WII_IPC_HLE_Interface::ES_DIVerify(pTMD, tmdSz);
ReturnValue = 1; ReturnValue = 1;
} }

View File

@ -4,6 +4,7 @@
#pragma once #pragma once
#include <memory>
#include <string> #include <string>
#include <vector> #include <vector>
@ -20,7 +21,11 @@ public:
virtual bool Read(u64 _Offset, u64 _Length, u8* _pBuffer) const = 0; virtual bool Read(u64 _Offset, u64 _Length, u8* _pBuffer) const = 0;
virtual bool RAWRead(u64 _Offset, u64 _Length, u8* _pBuffer) const = 0; virtual bool RAWRead(u64 _Offset, u64 _Length, u8* _pBuffer) const = 0;
virtual bool GetTitleID(u8*) const { return false; } virtual bool GetTitleID(u8*) const { return false; }
virtual void GetTMD(u8*, u32 *_sz) const { *_sz=0; } virtual std::unique_ptr<u8[]> GetTMD(u32 *_sz) const
{
*_sz = 0;
return std::unique_ptr<u8[]>();
}
virtual std::string GetUniqueID() const = 0; virtual std::string GetUniqueID() const = 0;
virtual std::string GetRevisionSpecificUniqueID() const { return ""; } virtual std::string GetRevisionSpecificUniqueID() const { return ""; }
virtual std::string GetMakerID() const = 0; virtual std::string GetMakerID() const = 0;

View File

@ -108,7 +108,7 @@ bool CVolumeWiiCrypted::GetTitleID(u8* _pBuffer) const
// TitleID offset in tik is 0x1DC // TitleID offset in tik is 0x1DC
return RAWRead(m_VolumeOffset + 0x1DC, 8, _pBuffer); return RAWRead(m_VolumeOffset + 0x1DC, 8, _pBuffer);
} }
void CVolumeWiiCrypted::GetTMD(u8* _pBuffer, u32 * _sz) const std::unique_ptr<u8[]> CVolumeWiiCrypted::GetTMD(u32 *_sz) const
{ {
*_sz = 0; *_sz = 0;
u32 tmdSz, u32 tmdSz,
@ -118,8 +118,10 @@ void CVolumeWiiCrypted::GetTMD(u8* _pBuffer, u32 * _sz) const
RAWRead(m_VolumeOffset + 0x2a8, sizeof(u32), (u8*)&tmdAddr); RAWRead(m_VolumeOffset + 0x2a8, sizeof(u32), (u8*)&tmdAddr);
tmdSz = Common::swap32(tmdSz); tmdSz = Common::swap32(tmdSz);
tmdAddr = Common::swap32(tmdAddr) << 2; tmdAddr = Common::swap32(tmdAddr) << 2;
RAWRead(m_VolumeOffset + tmdAddr, tmdSz, _pBuffer); std::unique_ptr<u8[]> buf{new u8[tmdSz]};
RAWRead(m_VolumeOffset + tmdAddr, tmdSz, buf.get());
*_sz = tmdSz; *_sz = tmdSz;
return buf;
} }
std::string CVolumeWiiCrypted::GetUniqueID() const std::string CVolumeWiiCrypted::GetUniqueID() const

View File

@ -27,7 +27,7 @@ public:
bool Read(u64 _Offset, u64 _Length, u8* _pBuffer) const override; bool Read(u64 _Offset, u64 _Length, u8* _pBuffer) const override;
bool RAWRead(u64 _Offset, u64 _Length, u8* _pBuffer) const override; bool RAWRead(u64 _Offset, u64 _Length, u8* _pBuffer) const override;
bool GetTitleID(u8* _pBuffer) const override; bool GetTitleID(u8* _pBuffer) const override;
void GetTMD(u8* _pBuffer, u32* _sz) const override; virtual std::unique_ptr<u8[]> GetTMD(u32 *_sz) const override;
std::string GetUniqueID() const override; std::string GetUniqueID() const override;
std::string GetMakerID() const override; std::string GetMakerID() const override;
std::vector<std::string> GetNames() const override; std::vector<std::string> GetNames() const override;