From 4b9b82e00016cbb8aa3c8a45bd32aea460f28c07 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 22 Sep 2015 13:25:54 -0400 Subject: [PATCH] DiscIO: Do swapping in GetTitleID implementations Gets rid of external swaps at every usage. --- Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device_es.cpp | 7 +++---- Source/Core/DiscIO/Volume.h | 2 +- Source/Core/DiscIO/VolumeCommon.cpp | 7 +++---- Source/Core/DiscIO/VolumeWad.cpp | 5 +++-- Source/Core/DiscIO/VolumeWad.h | 2 +- Source/Core/DiscIO/VolumeWiiCrypted.cpp | 8 ++++++-- Source/Core/DiscIO/VolumeWiiCrypted.h | 2 +- Source/Core/DolphinQt/GameList/GameFile.cpp | 10 ++++------ Source/Core/DolphinWX/GameListCtrl.cpp | 7 +++---- Source/Core/DolphinWX/ISOFile.cpp | 8 +++----- 10 files changed, 28 insertions(+), 30 deletions(-) diff --git a/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device_es.cpp b/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device_es.cpp index 1ecf72aff2..24692f91b3 100644 --- a/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device_es.cpp +++ b/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device_es.cpp @@ -115,8 +115,7 @@ void CWII_IPC_HLE_Device_es::OpenInternal() { // blindly grab the titleID from the disc - it's unencrypted at: // offset 0x0F8001DC and 0x0F80044C - DVDInterface::GetVolume().GetTitleID((u8*)&m_TitleID); - m_TitleID = Common::swap64(m_TitleID); + DVDInterface::GetVolume().GetTitleID(&m_TitleID); } else { @@ -1100,8 +1099,8 @@ u32 CWII_IPC_HLE_Device_es::ES_DIVerify(u8* _pTMD, u32 _sz) { u64 titleID = 0xDEADBEEFDEADBEEFull; u64 tmdTitleID = Common::swap64(*(u64*)(_pTMD+0x18c)); - DVDInterface::GetVolume().GetTitleID((u8*)&titleID); - if (Common::swap64(titleID) != tmdTitleID) + DVDInterface::GetVolume().GetTitleID(&titleID); + if (titleID != tmdTitleID) { return -1; } diff --git a/Source/Core/DiscIO/Volume.h b/Source/Core/DiscIO/Volume.h index 6f80efc55d..a2314e825d 100644 --- a/Source/Core/DiscIO/Volume.h +++ b/Source/Core/DiscIO/Volume.h @@ -76,7 +76,7 @@ public: return Common::swap32(temp); } - virtual bool GetTitleID(u8*) const { return false; } + virtual bool GetTitleID(u64*) const { return false; } virtual std::unique_ptr GetTMD(u32 *_sz) const { *_sz = 0; diff --git a/Source/Core/DiscIO/VolumeCommon.cpp b/Source/Core/DiscIO/VolumeCommon.cpp index f5ceac8b0f..345ead0193 100644 --- a/Source/Core/DiscIO/VolumeCommon.cpp +++ b/Source/Core/DiscIO/VolumeCommon.cpp @@ -29,12 +29,11 @@ std::vector IVolume::GetBanner(int* width, int* height) const *width = 0; *height = 0; - u64 TitleID = 0; - GetTitleID((u8*)&TitleID); - TitleID = Common::swap64(TitleID); + u64 title_id = 0; + GetTitleID(&title_id); std::string file_name = StringFromFormat("%s/title/%08x/%08x/data/banner.bin", - File::GetUserPath(D_WIIROOT_IDX).c_str(), (u32)(TitleID >> 32), (u32)TitleID); + File::GetUserPath(D_WIIROOT_IDX).c_str(), (u32)(title_id >> 32), (u32)title_id); if (!File::Exists(file_name)) return std::vector(); diff --git a/Source/Core/DiscIO/VolumeWad.cpp b/Source/Core/DiscIO/VolumeWad.cpp index f37e165b56..a268b3add9 100644 --- a/Source/Core/DiscIO/VolumeWad.cpp +++ b/Source/Core/DiscIO/VolumeWad.cpp @@ -93,11 +93,12 @@ std::string CVolumeWAD::GetMakerID() const return DecodeString(temp); } -bool CVolumeWAD::GetTitleID(u8* _pBuffer) const +bool CVolumeWAD::GetTitleID(u64* buffer) const { - if (!Read(m_offset + 0x01DC, 8, _pBuffer)) + if (!Read(m_offset + 0x01DC, sizeof(u64), reinterpret_cast(buffer))) return false; + *buffer = Common::swap64(*buffer); return true; } diff --git a/Source/Core/DiscIO/VolumeWad.h b/Source/Core/DiscIO/VolumeWad.h index 8405b612e9..580a751a8d 100644 --- a/Source/Core/DiscIO/VolumeWad.h +++ b/Source/Core/DiscIO/VolumeWad.h @@ -27,7 +27,7 @@ public: CVolumeWAD(std::unique_ptr reader); ~CVolumeWAD(); bool Read(u64 _Offset, u64 _Length, u8* _pBuffer, bool decrypt = false) const override; - bool GetTitleID(u8* _pBuffer) const override; + bool GetTitleID(u64* buffer) const override; std::string GetUniqueID() const override; std::string GetMakerID() const override; u16 GetRevision() const override; diff --git a/Source/Core/DiscIO/VolumeWiiCrypted.cpp b/Source/Core/DiscIO/VolumeWiiCrypted.cpp index 96fe209d0d..aa7f36da64 100644 --- a/Source/Core/DiscIO/VolumeWiiCrypted.cpp +++ b/Source/Core/DiscIO/VolumeWiiCrypted.cpp @@ -107,11 +107,15 @@ bool CVolumeWiiCrypted::Read(u64 _ReadOffset, u64 _Length, u8* _pBuffer, bool de return true; } -bool CVolumeWiiCrypted::GetTitleID(u8* _pBuffer) const +bool CVolumeWiiCrypted::GetTitleID(u64* buffer) const { // Tik is at m_VolumeOffset size 0x2A4 // TitleID offset in tik is 0x1DC - return Read(m_VolumeOffset + 0x1DC, 8, _pBuffer, false); + if (!Read(m_VolumeOffset + 0x1DC, sizeof(u64), reinterpret_cast(buffer), false)) + return false; + + *buffer = Common::swap64(*buffer); + return true; } std::unique_ptr CVolumeWiiCrypted::GetTMD(u32 *size) const diff --git a/Source/Core/DiscIO/VolumeWiiCrypted.h b/Source/Core/DiscIO/VolumeWiiCrypted.h index 87055f16e1..66b48a2e44 100644 --- a/Source/Core/DiscIO/VolumeWiiCrypted.h +++ b/Source/Core/DiscIO/VolumeWiiCrypted.h @@ -26,7 +26,7 @@ public: CVolumeWiiCrypted(std::unique_ptr reader, u64 _VolumeOffset, const unsigned char* _pVolumeKey); ~CVolumeWiiCrypted(); bool Read(u64 _Offset, u64 _Length, u8* _pBuffer, bool decrypt) const override; - bool GetTitleID(u8* _pBuffer) const override; + bool GetTitleID(u64* buffer) const override; std::unique_ptr GetTMD(u32 *_sz) const override; std::string GetUniqueID() const override; std::string GetMakerID() const override; diff --git a/Source/Core/DolphinQt/GameList/GameFile.cpp b/Source/Core/DolphinQt/GameList/GameFile.cpp index f10dd0f201..74b24590cb 100644 --- a/Source/Core/DolphinQt/GameList/GameFile.cpp +++ b/Source/Core/DolphinQt/GameList/GameFile.cpp @@ -377,13 +377,11 @@ const QString GameFile::GetWiiFSPath() const if (volume->GetVolumeType() != DiscIO::IVolume::GAMECUBE_DISC) { - std::string path; - u64 title; + u64 title_id; + volume->GetTitleID(&title_id); - volume->GetTitleID((u8*)&title); - title = Common::swap64(title); - - path = StringFromFormat("%s/title/%08x/%08x/data/", File::GetUserPath(D_WIIROOT_IDX).c_str(), (u32)(title >> 32), (u32)title); + std::string path = StringFromFormat("%s/title/%08x/%08x/data/", + File::GetUserPath(D_WIIROOT_IDX).c_str(), (u32)(title_id >> 32), (u32)title_id); if (!File::Exists(path)) File::CreateFullPath(path); diff --git a/Source/Core/DolphinWX/GameListCtrl.cpp b/Source/Core/DolphinWX/GameListCtrl.cpp index 8d5ed1d61a..987b72c816 100644 --- a/Source/Core/DolphinWX/GameListCtrl.cpp +++ b/Source/Core/DolphinWX/GameListCtrl.cpp @@ -947,12 +947,11 @@ void CGameListCtrl::OnExportSave(wxCommandEvent& WXUNUSED (event)) if (!iso) return; - u64 title; + u64 title_id; std::unique_ptr volume(DiscIO::CreateVolumeFromFilename(iso->GetFileName())); - if (volume && volume->GetTitleID((u8*)&title)) + if (volume && volume->GetTitleID(&title_id)) { - title = Common::swap64(title); - CWiiSaveCrypted::ExportWiiSave(title); + CWiiSaveCrypted::ExportWiiSave(title_id); } } diff --git a/Source/Core/DolphinWX/ISOFile.cpp b/Source/Core/DolphinWX/ISOFile.cpp index 82cd73fba5..f7841742cc 100644 --- a/Source/Core/DolphinWX/ISOFile.cpp +++ b/Source/Core/DolphinWX/ISOFile.cpp @@ -340,13 +340,11 @@ const std::string GameListItem::GetWiiFSPath() const if (iso->GetVolumeType() != DiscIO::IVolume::GAMECUBE_DISC) { - u64 title = 0; - - iso->GetTitleID((u8*)&title); - title = Common::swap64(title); + u64 title_id = 0; + iso->GetTitleID(&title_id); const std::string path = StringFromFormat("%s/title/%08x/%08x/data/", - File::GetUserPath(D_WIIROOT_IDX).c_str(), (u32)(title>>32), (u32)title); + File::GetUserPath(D_WIIROOT_IDX).c_str(), (u32)(title_id >> 32), (u32)title_id); if (!File::Exists(path)) File::CreateFullPath(path);