diff options
Diffstat (limited to 'Source/Core/DiscIO/FileSystemGCWii.cpp')
| -rw-r--r-- | Source/Core/DiscIO/FileSystemGCWii.cpp | 27 |
1 files changed, 16 insertions, 11 deletions
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 |
