From 955ab72b1d0661b1917373d185ed0c9252ea67c5 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sat, 10 Jun 2017 20:11:58 +0200 Subject: [PATCH] DirectoryBlob: Remove m_root_directory from DirectoryBlob --- Source/Core/DiscIO/DirectoryBlob.cpp | 26 +++++++++++++------------- Source/Core/DiscIO/DirectoryBlob.h | 11 +++++------ 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/Source/Core/DiscIO/DirectoryBlob.cpp b/Source/Core/DiscIO/DirectoryBlob.cpp index 4256d6cc9a..a2e2d2f505 100644 --- a/Source/Core/DiscIO/DirectoryBlob.cpp +++ b/Source/Core/DiscIO/DirectoryBlob.cpp @@ -157,10 +157,9 @@ std::unique_ptr DirectoryBlobReader::Create(const std::stri return std::unique_ptr(new DirectoryBlobReader(root_directory)); } -DirectoryBlobReader::DirectoryBlobReader(const std::string& root_directory) - : m_root_directory(root_directory) +DirectoryBlobReader::DirectoryBlobReader(const std::string& game_partition_root) { - DirectoryBlobPartition game_partition(root_directory, {}); + DirectoryBlobPartition game_partition(game_partition_root, {}); m_is_wii = game_partition.IsWii(); if (!m_is_wii) @@ -170,7 +169,7 @@ DirectoryBlobReader::DirectoryBlobReader(const std::string& root_directory) } else { - SetNonpartitionDiscHeader(game_partition.GetHeader()); + SetNonpartitionDiscHeader(game_partition.GetHeader(), game_partition_root); const u64 unaligned_data_size = VolumeWii::PartitionOffsetToRawOffset( game_partition.GetDataSize(), Partition(GAME_PARTITION_ADDRESS)); @@ -179,8 +178,8 @@ DirectoryBlobReader::DirectoryBlobReader(const std::string& root_directory) m_partitions.emplace(GAME_PARTITION_ADDRESS, std::move(game_partition)); SetPartitionTable(); - SetWiiRegionData(); - SetTMDAndTicket(); + SetWiiRegionData(game_partition_root); + SetTMDAndTicket(game_partition_root); } } @@ -258,14 +257,15 @@ u64 DirectoryBlobReader::GetDataSize() const return m_data_size; } -void DirectoryBlobReader::SetNonpartitionDiscHeader(const std::vector& partition_header) +void DirectoryBlobReader::SetNonpartitionDiscHeader(const std::vector& partition_header, + const std::string& game_partition_root) { constexpr u64 NONPARTITION_DISKHEADER_ADDRESS = 0; constexpr u64 NONPARTITION_DISKHEADER_SIZE = 0x100; m_disk_header_nonpartition.resize(NONPARTITION_DISKHEADER_SIZE); const size_t header_bin_bytes_read = - ReadFileToVector(m_root_directory + "disc/header.bin", &m_disk_header_nonpartition); + ReadFileToVector(game_partition_root + "disc/header.bin", &m_disk_header_nonpartition); // If header.bin is missing or smaller than expected, use the content of sys/boot.bin instead std::copy(partition_header.data() + header_bin_bytes_read, @@ -293,7 +293,7 @@ void DirectoryBlobReader::SetPartitionTable() reinterpret_cast(PARTITION_TABLE.data())); } -void DirectoryBlobReader::SetWiiRegionData() +void DirectoryBlobReader::SetWiiRegionData(const std::string& game_partition_root) { m_wii_region_data.resize(0x10, 0x00); m_wii_region_data.resize(0x20, 0x80); @@ -302,7 +302,7 @@ void DirectoryBlobReader::SetWiiRegionData() constexpr u32 INVALID_REGION = 0xFF; Write32(INVALID_REGION, 0, &m_wii_region_data); - const std::string region_bin_path = m_root_directory + "disc/region.bin"; + const std::string region_bin_path = game_partition_root + "disc/region.bin"; const size_t bytes_read = ReadFileToVector(region_bin_path, &m_wii_region_data); if (bytes_read < 0x4) ERROR_LOG(DISCIO, "Couldn't read region from %s", region_bin_path.c_str()); @@ -315,15 +315,15 @@ void DirectoryBlobReader::SetWiiRegionData() m_wii_region_data.data()); } -void DirectoryBlobReader::SetTMDAndTicket() +void DirectoryBlobReader::SetTMDAndTicket(const std::string& partition_root) { constexpr u32 TICKET_OFFSET = 0x0; constexpr u32 TICKET_SIZE = 0x2a4; constexpr u32 TMD_OFFSET = 0x2c0; constexpr u32 MAX_TMD_SIZE = 0x49e4; - AddFileToContents(&m_nonpartition_contents, m_root_directory + "ticket.bin", + AddFileToContents(&m_nonpartition_contents, partition_root + "ticket.bin", GAME_PARTITION_ADDRESS + TICKET_OFFSET, TICKET_SIZE); - const DiscContent& tmd = AddFileToContents(&m_nonpartition_contents, m_root_directory + "tmd.bin", + const DiscContent& tmd = AddFileToContents(&m_nonpartition_contents, partition_root + "tmd.bin", GAME_PARTITION_ADDRESS + TMD_OFFSET, MAX_TMD_SIZE); m_tmd_header = {Common::swap32(static_cast(tmd.GetSize())), Common::swap32(TMD_OFFSET >> 2)}; m_nonpartition_contents.emplace(GAME_PARTITION_ADDRESS + TICKET_SIZE, sizeof(m_tmd_header), diff --git a/Source/Core/DiscIO/DirectoryBlob.h b/Source/Core/DiscIO/DirectoryBlob.h index c644db4692..ef7509ede0 100644 --- a/Source/Core/DiscIO/DirectoryBlob.h +++ b/Source/Core/DiscIO/DirectoryBlob.h @@ -120,16 +120,15 @@ public: u64 GetDataSize() const override; private: - explicit DirectoryBlobReader(const std::string& root_directory); + explicit DirectoryBlobReader(const std::string& game_partition_root); bool ReadInternal(u64 offset, u64 length, u8* buffer, const std::set& contents); - void SetNonpartitionDiscHeader(const std::vector& partition_header); + void SetNonpartitionDiscHeader(const std::vector& partition_header, + const std::string& game_partition_root); void SetPartitionTable(); - void SetWiiRegionData(); - void SetTMDAndTicket(); - - std::string m_root_directory; + void SetWiiRegionData(const std::string& game_partition_root); + void SetTMDAndTicket(const std::string& partition_root); // For GameCube: DirectoryBlobPartition m_gamecube_pseudopartition;