mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 14:19:46 -06:00
DirectoryBlob: Support multiple partitions
This commit is contained in:
@ -25,6 +25,8 @@ class IOFile;
|
||||
|
||||
namespace DiscIO
|
||||
{
|
||||
enum class PartitionType : u32;
|
||||
|
||||
class DiscContent
|
||||
{
|
||||
public:
|
||||
@ -67,6 +69,7 @@ public:
|
||||
|
||||
bool IsWii() const { return m_is_wii; }
|
||||
u64 GetDataSize() const { return m_data_size; }
|
||||
const std::string& GetRootDirectory() const { return m_root_directory; }
|
||||
const std::vector<u8>& GetHeader() const { return m_disk_header; }
|
||||
const std::set<DiscContent>& GetContents() const { return m_contents; }
|
||||
private:
|
||||
@ -120,15 +123,27 @@ public:
|
||||
u64 GetDataSize() const override;
|
||||
|
||||
private:
|
||||
explicit DirectoryBlobReader(const std::string& game_partition_root);
|
||||
struct PartitionWithType
|
||||
{
|
||||
PartitionWithType(DirectoryBlobPartition&& partition_, PartitionType type_)
|
||||
: partition(std::move(partition_)), type(type_)
|
||||
{
|
||||
}
|
||||
|
||||
DirectoryBlobPartition partition;
|
||||
PartitionType type;
|
||||
};
|
||||
|
||||
explicit DirectoryBlobReader(const std::string& game_partition_root,
|
||||
const std::string& true_root);
|
||||
|
||||
bool ReadInternal(u64 offset, u64 length, u8* buffer, const std::set<DiscContent>& contents);
|
||||
|
||||
void SetNonpartitionDiscHeader(const std::vector<u8>& partition_header,
|
||||
const std::string& game_partition_root);
|
||||
void SetPartitionTable();
|
||||
void SetWiiRegionData(const std::string& game_partition_root);
|
||||
void SetTMDAndTicket(const std::string& partition_root);
|
||||
void SetPartitions(std::vector<PartitionWithType>&& partitions);
|
||||
void SetTMDAndTicket(const std::string& partition_root, u64 partition_address);
|
||||
|
||||
// For GameCube:
|
||||
DirectoryBlobPartition m_gamecube_pseudopartition;
|
||||
@ -140,16 +155,9 @@ private:
|
||||
bool m_is_wii;
|
||||
|
||||
std::vector<u8> m_disk_header_nonpartition;
|
||||
std::vector<u8> m_partition_table;
|
||||
std::vector<u8> m_wii_region_data;
|
||||
|
||||
#pragma pack(push, 1)
|
||||
struct TMDHeader
|
||||
{
|
||||
u32 tmd_size;
|
||||
u32 tmd_offset;
|
||||
} m_tmd_header;
|
||||
static_assert(sizeof(TMDHeader) == 8, "Wrong size for TMDHeader");
|
||||
#pragma pack(pop)
|
||||
std::vector<std::vector<u8>> m_tmd_headers;
|
||||
|
||||
u64 m_data_size;
|
||||
};
|
||||
|
Reference in New Issue
Block a user