summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO/VolumeDirectory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/DiscIO/VolumeDirectory.cpp')
-rw-r--r--Source/Core/DiscIO/VolumeDirectory.cpp30
1 files changed, 21 insertions, 9 deletions
diff --git a/Source/Core/DiscIO/VolumeDirectory.cpp b/Source/Core/DiscIO/VolumeDirectory.cpp
index 249c6f520d..397f0fc831 100644
--- a/Source/Core/DiscIO/VolumeDirectory.cpp
+++ b/Source/Core/DiscIO/VolumeDirectory.cpp
@@ -64,8 +64,10 @@ bool CVolumeDirectory::IsValidDirectory(const std::string& directory)
return File::IsDirectory(ExtractDirectoryName(directory));
}
-bool CVolumeDirectory::Read(u64 offset, u64 length, u8* buffer, bool decrypt) const
+bool CVolumeDirectory::Read(u64 offset, u64 length, u8* buffer, const Partition& partition) const
{
+ bool decrypt = partition != PARTITION_NONE;
+
if (!decrypt && (offset + length >= 0x400) && m_is_wii)
{
// Fully supporting this would require re-encrypting every file that's read.
@@ -77,7 +79,7 @@ bool CVolumeDirectory::Read(u64 offset, u64 length, u8* buffer, bool decrypt) co
}
if (decrypt && !m_is_wii)
- PanicAlertT("Tried to decrypt data from a non-Wii volume");
+ return false;
// header
if (offset < DISKHEADERINFO_ADDRESS)
@@ -157,7 +159,17 @@ bool CVolumeDirectory::Read(u64 offset, u64 length, u8* buffer, bool decrypt) co
return true;
}
-std::string CVolumeDirectory::GetGameID() const
+std::vector<Partition> CVolumeDirectory::GetPartitions() const
+{
+ return m_is_wii ? std::vector<Partition>{GetGamePartition()} : std::vector<Partition>();
+}
+
+Partition CVolumeDirectory::GetGamePartition() const
+{
+ return m_is_wii ? Partition(0x50000) : PARTITION_NONE;
+}
+
+std::string CVolumeDirectory::GetGameID(const Partition& partition) const
{
return std::string(m_disk_header.begin(), m_disk_header.begin() + MAX_ID_LENGTH);
}
@@ -175,21 +187,21 @@ Region CVolumeDirectory::GetRegion() const
return RegionSwitchGC(m_disk_header[3]);
}
-Country CVolumeDirectory::GetCountry() const
+Country CVolumeDirectory::GetCountry(const Partition& partition) const
{
return CountrySwitch(m_disk_header[3]);
}
-std::string CVolumeDirectory::GetMakerID() const
+std::string CVolumeDirectory::GetMakerID(const Partition& partition) const
{
// Not implemented
return "00";
}
-std::string CVolumeDirectory::GetInternalName() const
+std::string CVolumeDirectory::GetInternalName(const Partition& partition) const
{
char name[0x60];
- if (Read(0x20, 0x60, (u8*)name, false))
+ if (Read(0x20, 0x60, (u8*)name, partition))
return DecodeString(name);
else
return "";
@@ -218,13 +230,13 @@ void CVolumeDirectory::SetName(const std::string& name)
m_disk_header[length + 0x20] = 0;
}
-u64 CVolumeDirectory::GetFSTSize() const
+u64 CVolumeDirectory::GetFSTSize(const Partition& partition) const
{
// Not implemented
return 0;
}
-std::string CVolumeDirectory::GetApploaderDate() const
+std::string CVolumeDirectory::GetApploaderDate(const Partition& partition) const
{
// Not implemented
return "VOID";