summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO/DirectoryBlob.cpp
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2020-08-29 15:12:02 +0200
committerJosJuice <josjuice@gmail.com>2020-08-29 15:18:52 +0200
commit047bb803376a294a66bca5c9e91e23918706d151 (patch)
treec46f83fd3434880278d225c63241e298a4a80c24 /Source/Core/DiscIO/DirectoryBlob.cpp
parent800b2480ecb0d5d0285c6d560fb25f6b96c3b021 (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.cpp30
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,