diff options
| author | JosJuice <josjuice@gmail.com> | 2020-08-29 15:12:02 +0200 |
|---|---|---|
| committer | JosJuice <josjuice@gmail.com> | 2020-08-29 15:18:52 +0200 |
| commit | 047bb803376a294a66bca5c9e91e23918706d151 (patch) | |
| tree | c46f83fd3434880278d225c63241e298a4a80c24 /Source/Core/DiscIO/DirectoryBlob.cpp | |
| parent | 800b2480ecb0d5d0285c6d560fb25f6b96c3b021 (diff) | |
DiscIO: Add parameters to BlobReader::SupportsReadWiiDecrypted
It's possible (but rare) for a WIA or RVZ file to support
this for some partitions but not all, and for the game and
the blob code to disagree on how large a partition is.
Diffstat (limited to 'Source/Core/DiscIO/DirectoryBlob.cpp')
| -rw-r--r-- | Source/Core/DiscIO/DirectoryBlob.cpp | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/Source/Core/DiscIO/DirectoryBlob.cpp b/Source/Core/DiscIO/DirectoryBlob.cpp index 77ca32d19b..1e06dd74bd 100644 --- a/Source/Core/DiscIO/DirectoryBlob.cpp +++ b/Source/Core/DiscIO/DirectoryBlob.cpp @@ -406,25 +406,33 @@ bool DirectoryBlobReader::Read(u64 offset, u64 length, u8* buffer) .Read(offset, length, buffer); } -bool DirectoryBlobReader::SupportsReadWiiDecrypted() const +const DirectoryBlobPartition* DirectoryBlobReader::GetPartition(u64 offset, u64 size, + u64 partition_data_offset) const { - return m_is_wii; + const auto it = m_partitions.find(partition_data_offset); + if (it == m_partitions.end()) + return nullptr; + + if (offset + size > it->second.GetDataSize()) + return nullptr; + + return &it->second; +} + +bool DirectoryBlobReader::SupportsReadWiiDecrypted(u64 offset, u64 size, + u64 partition_data_offset) const +{ + return static_cast<bool>(GetPartition(offset, size, partition_data_offset)); } bool DirectoryBlobReader::ReadWiiDecrypted(u64 offset, u64 size, u8* buffer, u64 partition_data_offset) { - if (!m_is_wii) - return false; - - auto it = m_partitions.find(partition_data_offset); - if (it == m_partitions.end()) - return false; - - if (offset + size > it->second.GetDataSize()) + const DirectoryBlobPartition* partition = GetPartition(offset, size, partition_data_offset); + if (!partition) return false; - return it->second.GetContents().Read(offset, size, buffer); + return partition->GetContents().Read(offset, size, buffer); } bool DirectoryBlobReader::EncryptPartitionData(u64 offset, u64 size, u8* buffer, |
