From 618ccf6109076f5a88bd1fb9aff188de0884ff68 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sat, 17 Oct 2015 20:52:26 +0200 Subject: [PATCH] Remove DiscScrubber::GetDOLSize in favor of IFileSystem::GetBootDOLSize IFileSystem::GetBootDOLSize acts the same. The only difference is that it reads the DOL offset on its own, but this change makes that optional. --- Source/Core/DiscIO/DiscScrubber.cpp | 28 +------------------------- Source/Core/DiscIO/FileSystemGCWii.cpp | 27 +++++++++++++++---------- Source/Core/DiscIO/FileSystemGCWii.h | 1 + Source/Core/DiscIO/Filesystem.h | 1 + 4 files changed, 19 insertions(+), 38 deletions(-) diff --git a/Source/Core/DiscIO/DiscScrubber.cpp b/Source/Core/DiscIO/DiscScrubber.cpp index e669a5f4b3..938b0d04eb 100644 --- a/Source/Core/DiscIO/DiscScrubber.cpp +++ b/Source/Core/DiscIO/DiscScrubber.cpp @@ -78,7 +78,6 @@ void ReadFromVolume(u64 _Offset, u64 _Length, u32& _Buffer, bool _Decrypt); void ReadFromVolume(u64 _Offset, u64 _Length, u64& _Buffer, bool _Decrypt); bool ParseDisc(); bool ParsePartitionData(SPartition& _rPartition); -u32 GetDOLSize(u64 _DOLOffset); bool SetupScrub(const std::string& filename, int block_size) @@ -294,7 +293,7 @@ bool ParsePartitionData(SPartition& _rPartition) // DOL ReadFromVolume(0x420, 4, _rPartition.Header.DOLOffset, true); - _rPartition.Header.DOLSize = GetDOLSize(_rPartition.Header.DOLOffset); + _rPartition.Header.DOLSize = filesystem->GetBootDOLSize(_rPartition.Header.DOLOffset); MarkAsUsedE(_rPartition.Offset + _rPartition.Header.DataOffset , _rPartition.Header.DOLOffset @@ -327,31 +326,6 @@ bool ParsePartitionData(SPartition& _rPartition) return ParsedOK; } -u32 GetDOLSize(u64 _DOLOffset) -{ - u32 offset = 0, size = 0, max = 0; - - // Iterate through the 7 code segments - for (u8 i = 0; i < 7; i++) - { - ReadFromVolume(_DOLOffset + 0x00 + i * 4, 4, offset, true); - ReadFromVolume(_DOLOffset + 0x90 + i * 4, 4, size, true); - if (offset + size > max) - max = offset + size; - } - - // Iterate through the 11 data segments - for (u8 i = 0; i < 11; i++) - { - ReadFromVolume(_DOLOffset + 0x1c + i * 4, 4, offset, true); - ReadFromVolume(_DOLOffset + 0xac + i * 4, 4, size, true); - if (offset + size > max) - max = offset + size; - } - - return max; -} - } // namespace DiscScrubber } // namespace DiscIO diff --git a/Source/Core/DiscIO/FileSystemGCWii.cpp b/Source/Core/DiscIO/FileSystemGCWii.cpp index 439a80af99..e20d633f35 100644 --- a/Source/Core/DiscIO/FileSystemGCWii.cpp +++ b/Source/Core/DiscIO/FileSystemGCWii.cpp @@ -150,27 +150,32 @@ bool CFileSystemGCWii::ExportApploader(const std::string& _rExportFolder) const u32 CFileSystemGCWii::GetBootDOLSize() const { - u32 DolOffset = m_rVolume->Read32(0x420, m_Wii) << GetOffsetShift(); - u32 DolSize = 0, offset = 0, size = 0; + return GetBootDOLSize((u64)m_rVolume->Read32(0x420, m_Wii) << GetOffsetShift()); +} + +u32 CFileSystemGCWii::GetBootDOLSize(u64 dol_offset) const +{ + u32 dol_size = 0; + u32 offset = 0; + u32 size = 0; // Iterate through the 7 code segments for (u8 i = 0; i < 7; i++) { - offset = m_rVolume->Read32(DolOffset + 0x00 + i * 4, m_Wii); - size = m_rVolume->Read32(DolOffset + 0x90 + i * 4, m_Wii); - if (offset + size > DolSize) - DolSize = offset + size; + offset = m_rVolume->Read32(dol_offset + 0x00 + i * 4, m_Wii); + size = m_rVolume->Read32(dol_offset + 0x90 + i * 4, m_Wii); + dol_size = std::max(offset + size, dol_size); } // Iterate through the 11 data segments for (u8 i = 0; i < 11; i++) { - offset = m_rVolume->Read32(DolOffset + 0x1c + i * 4, m_Wii); - size = m_rVolume->Read32(DolOffset + 0xac + i * 4, m_Wii); - if (offset + size > DolSize) - DolSize = offset + size; + offset = m_rVolume->Read32(dol_offset + 0x1c + i * 4, m_Wii); + size = m_rVolume->Read32(dol_offset + 0xac + i * 4, m_Wii); + dol_size = std::max(offset + size, dol_size); } - return DolSize; + + return dol_size; } bool CFileSystemGCWii::GetBootDOL(u8* &buffer, u32 DolSize) const diff --git a/Source/Core/DiscIO/FileSystemGCWii.h b/Source/Core/DiscIO/FileSystemGCWii.h index f244b1a60f..25fe0c7d8e 100644 --- a/Source/Core/DiscIO/FileSystemGCWii.h +++ b/Source/Core/DiscIO/FileSystemGCWii.h @@ -32,6 +32,7 @@ public: bool ExportDOL(const std::string& _rExportFolder) const override; bool GetBootDOL(u8* &buffer, u32 DolSize) const override; u32 GetBootDOLSize() const override; + u32 GetBootDOLSize(u64 dol_offset) const override; private: bool m_Initialized; diff --git a/Source/Core/DiscIO/Filesystem.h b/Source/Core/DiscIO/Filesystem.h index 1f3e73f3ef..134a64bc7a 100644 --- a/Source/Core/DiscIO/Filesystem.h +++ b/Source/Core/DiscIO/Filesystem.h @@ -52,6 +52,7 @@ public: virtual const std::string GetFileName(u64 _Address) = 0; virtual bool GetBootDOL(u8* &buffer, u32 DolSize) const = 0; virtual u32 GetBootDOLSize() const = 0; + virtual u32 GetBootDOLSize(u64 dol_offset) const = 0; virtual const IVolume *GetVolume() const { return m_rVolume; } protected: