mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-22 22:00:39 -06:00
WIA: Make use of the exception lists
This commit is contained in:
@ -24,7 +24,8 @@ WiiEncryptionCache::~WiiEncryptionCache() = default;
|
||||
|
||||
const std::array<u8, VolumeWii::GROUP_TOTAL_SIZE>*
|
||||
WiiEncryptionCache::EncryptGroup(u64 offset, u64 partition_data_offset,
|
||||
u64 partition_data_decrypted_size, const Key& key)
|
||||
u64 partition_data_decrypted_size, const Key& key,
|
||||
const HashExceptionCallback& hash_exception_callback)
|
||||
{
|
||||
// Only allocate memory if this function actually ends up getting called
|
||||
if (!m_cache)
|
||||
@ -40,8 +41,20 @@ WiiEncryptionCache::EncryptGroup(u64 offset, u64 partition_data_offset,
|
||||
|
||||
if (m_cached_offset != group_offset_on_disc)
|
||||
{
|
||||
std::function<void(VolumeWii::HashBlock * hash_blocks)> hash_exception_callback_2;
|
||||
|
||||
if (hash_exception_callback)
|
||||
{
|
||||
hash_exception_callback_2 =
|
||||
[offset, &hash_exception_callback](
|
||||
VolumeWii::HashBlock hash_blocks[VolumeWii::BLOCKS_PER_GROUP]) {
|
||||
return hash_exception_callback(hash_blocks, offset);
|
||||
};
|
||||
}
|
||||
|
||||
if (!VolumeWii::EncryptGroup(group_offset_in_partition, partition_data_offset,
|
||||
partition_data_decrypted_size, key, m_blob, m_cache.get()))
|
||||
partition_data_decrypted_size, key, m_blob, m_cache.get(),
|
||||
hash_exception_callback_2))
|
||||
{
|
||||
m_cached_offset = std::numeric_limits<u64>::max(); // Invalidate the cache
|
||||
return nullptr;
|
||||
@ -54,13 +67,14 @@ WiiEncryptionCache::EncryptGroup(u64 offset, u64 partition_data_offset,
|
||||
}
|
||||
|
||||
bool WiiEncryptionCache::EncryptGroups(u64 offset, u64 size, u8* out_ptr, u64 partition_data_offset,
|
||||
u64 partition_data_decrypted_size, const Key& key)
|
||||
u64 partition_data_decrypted_size, const Key& key,
|
||||
const HashExceptionCallback& hash_exception_callback)
|
||||
{
|
||||
while (size > 0)
|
||||
{
|
||||
const std::array<u8, VolumeWii::GROUP_TOTAL_SIZE>* group =
|
||||
EncryptGroup(Common::AlignDown(offset, VolumeWii::GROUP_TOTAL_SIZE), partition_data_offset,
|
||||
partition_data_decrypted_size, key);
|
||||
partition_data_decrypted_size, key, hash_exception_callback);
|
||||
|
||||
if (!group)
|
||||
return false;
|
||||
|
Reference in New Issue
Block a user