summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2015-10-17 20:52:26 +0200
committerJosJuice <josjuice@gmail.com>2015-10-17 20:52:26 +0200
commit618ccf6109076f5a88bd1fb9aff188de0884ff68 (patch)
treef246110ab5f36c1463f1b511aec9c0aa2695bf8b /Source/Core/DiscIO
parent05e339a605be5f5ccd0f710af774fa08eadd65a2 (diff)
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.
Diffstat (limited to 'Source/Core/DiscIO')
-rw-r--r--Source/Core/DiscIO/DiscScrubber.cpp28
-rw-r--r--Source/Core/DiscIO/FileSystemGCWii.cpp27
-rw-r--r--Source/Core/DiscIO/FileSystemGCWii.h1
-rw-r--r--Source/Core/DiscIO/Filesystem.h1
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: