diff --git a/Source/Core/DiscIO/DirectoryBlob.cpp b/Source/Core/DiscIO/DirectoryBlob.cpp index e76fa7ad27..c86b0396a2 100644 --- a/Source/Core/DiscIO/DirectoryBlob.cpp +++ b/Source/Core/DiscIO/DirectoryBlob.cpp @@ -123,6 +123,15 @@ bool DiscContent::Read(u64* offset, u64* length, u8** buffer) const return false; } } + else if (std::holds_alternative(m_content_source)) + { + const auto& source = std::get(m_content_source); + if (!source.m_volume->Read(source.m_offset + offset_in_content, bytes_to_read, *buffer, + source.m_partition)) + { + return false; + } + } else { PanicAlertFmt("DirectoryBlob: Invalid content source in DiscContent."); diff --git a/Source/Core/DiscIO/DirectoryBlob.h b/Source/Core/DiscIO/DirectoryBlob.h index e542705f9f..e942c14a94 100644 --- a/Source/Core/DiscIO/DirectoryBlob.h +++ b/Source/Core/DiscIO/DirectoryBlob.h @@ -16,6 +16,7 @@ #include "Common/CommonTypes.h" #include "Common/FileUtil.h" #include "DiscIO/Blob.h" +#include "DiscIO/Volume.h" #include "DiscIO/WiiEncryptionCache.h" namespace File @@ -57,9 +58,23 @@ struct ContentPartition u64 m_partition_data_offset; }; -using ContentSource = std::variant; class DiscContent