ncch_container: Add support for exheader replacement

This adds support for custom exheaders, which brings feature parity
with Luma3DS's code patching functionality and allows for injecting
new game code.
This commit is contained in:
Léo Lam 2019-06-29 18:08:52 +02:00
parent 5299678880
commit bc30412484

View file

@ -320,9 +320,17 @@ Loader::ResultStatus NCCHContainer::Load() {
// System archives and DLC don't have an extended header but have RomFS
if (ncch_header.extended_header_size) {
if (file.ReadBytes(&exheader_header, sizeof(ExHeader_Header)) !=
sizeof(ExHeader_Header))
auto read_exheader = [this](FileUtil::IOFile& file) {
const std::size_t size = sizeof(exheader_header);
return file && file.ReadBytes(&exheader_header, size) == size;
};
FileUtil::IOFile exheader_override_file{filepath + ".exheader", "rb"};
if (read_exheader(exheader_override_file)) {
is_tainted = true;
} else if (!read_exheader(file)) {
return Loader::ResultStatus::Error;
}
if (is_encrypted) {
// This ID check is masked to low 32-bit as a toleration to ill-formed ROM created