summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO/DirectoryBlob.cpp
diff options
context:
space:
mode:
authorAdmiral H. Curtiss <pikachu025@gmail.com>2022-08-12 22:35:40 +0200
committerGitHub <noreply@github.com>2022-08-12 22:35:40 +0200
commit92c6407c45dad29f654c67a7a40733aae51dacbd (patch)
treef7ab051bf30b863977fa85f29bc5acb1d17d37cf /Source/Core/DiscIO/DirectoryBlob.cpp
parentd29b349a0cef359889b6e07f555c600f056d0363 (diff)
parent7ac042d00ba6cb58d90c10ed7cae912c96e5c246 (diff)
Merge pull request #10970 from AdmiralCurtiss/directoryblob-encrypted
DirectoryBlob: Fix partition size mixup for encrypted Wii discs.
Diffstat (limited to 'Source/Core/DiscIO/DirectoryBlob.cpp')
-rw-r--r--Source/Core/DiscIO/DirectoryBlob.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/Source/Core/DiscIO/DirectoryBlob.cpp b/Source/Core/DiscIO/DirectoryBlob.cpp
index 295235c605..193d74c244 100644
--- a/Source/Core/DiscIO/DirectoryBlob.cpp
+++ b/Source/Core/DiscIO/DirectoryBlob.cpp
@@ -663,10 +663,14 @@ void DirectoryBlobReader::SetPartitions(std::vector<PartitionWithType>&& partiti
SetPartitionHeader(&partitions[i].partition, partition_address);
- const u64 data_size = partitions[i].partition.GetDataSize();
+ const u64 data_size =
+ Common::AlignUp(partitions[i].partition.GetDataSize(), VolumeWii::BLOCK_DATA_SIZE);
+ partitions[i].partition.SetDataSize(data_size);
+ const u64 encrypted_data_size =
+ (data_size / VolumeWii::BLOCK_DATA_SIZE) * VolumeWii::BLOCK_TOTAL_SIZE;
const u64 partition_data_offset = partition_address + PARTITION_DATA_OFFSET;
m_partitions.emplace(partition_data_offset, std::move(partitions[i].partition));
- m_nonpartition_contents.Add(partition_data_offset, data_size,
+ m_nonpartition_contents.Add(partition_data_offset, encrypted_data_size,
ContentPartition{this, 0, partition_data_offset});
const u64 unaligned_next_partition_address = VolumeWii::OffsetInHashedPartitionToRawOffset(
data_size, Partition(partition_address), PARTITION_DATA_OFFSET);