summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdmiral H. Curtiss <pikachu025@gmail.com>2021-09-22 03:02:39 +0200
committerAdmiral H. Curtiss <pikachu025@gmail.com>2021-10-23 23:51:23 +0200
commitb1802f6daa65e8617b26c4b47d94813242fb7945 (patch)
tree04bc4172d162bf7f1d474f9eda77b102e61973e4
parentf8611f71395f0dc469582c8cdfce7c601c635b00 (diff)
DiscIO/DirectoryBlob: Add a content source representing a run of padding bytes.
-rw-r--r--Source/Core/DiscIO/DirectoryBlob.cpp5
-rw-r--r--Source/Core/DiscIO/DirectoryBlob.h10
2 files changed, 14 insertions, 1 deletions
diff --git a/Source/Core/DiscIO/DirectoryBlob.cpp b/Source/Core/DiscIO/DirectoryBlob.cpp
index c86b0396a2..356416b076 100644
--- a/Source/Core/DiscIO/DirectoryBlob.cpp
+++ b/Source/Core/DiscIO/DirectoryBlob.cpp
@@ -132,6 +132,11 @@ bool DiscContent::Read(u64* offset, u64* length, u8** buffer) const
return false;
}
}
+ else if (std::holds_alternative<ContentFixedByte>(m_content_source))
+ {
+ const ContentFixedByte& source = std::get<ContentFixedByte>(m_content_source);
+ std::fill_n(*buffer, bytes_to_read, source.m_byte);
+ }
else
{
PanicAlertFmt("DirectoryBlob: Invalid content source in DiscContent.");
diff --git a/Source/Core/DiscIO/DirectoryBlob.h b/Source/Core/DiscIO/DirectoryBlob.h
index e942c14a94..5ab03137e5 100644
--- a/Source/Core/DiscIO/DirectoryBlob.h
+++ b/Source/Core/DiscIO/DirectoryBlob.h
@@ -71,10 +71,18 @@ struct ContentVolume
Partition m_partition;
};
+// Content chunk representing a run of identical bytes.
+// Useful for padding between chunks within a file.
+struct ContentFixedByte
+{
+ u8 m_byte;
+};
+
using ContentSource = std::variant<ContentFile, // File
const u8*, // Memory
ContentPartition, // Partition
- ContentVolume // Volume
+ ContentVolume, // Volume
+ ContentFixedByte // Fixed value padding
>;
class DiscContent