mirror of
https://git.h3cjp.net/H3cJP/citra.git
synced 2024-12-01 00:12:55 +00:00
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:
parent
5299678880
commit
bc30412484
|
@ -320,9 +320,17 @@ Loader::ResultStatus NCCHContainer::Load() {
|
||||||
|
|
||||||
// System archives and DLC don't have an extended header but have RomFS
|
// System archives and DLC don't have an extended header but have RomFS
|
||||||
if (ncch_header.extended_header_size) {
|
if (ncch_header.extended_header_size) {
|
||||||
if (file.ReadBytes(&exheader_header, sizeof(ExHeader_Header)) !=
|
auto read_exheader = [this](FileUtil::IOFile& file) {
|
||||||
sizeof(ExHeader_Header))
|
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;
|
return Loader::ResultStatus::Error;
|
||||||
|
}
|
||||||
|
|
||||||
if (is_encrypted) {
|
if (is_encrypted) {
|
||||||
// This ID check is masked to low 32-bit as a toleration to ill-formed ROM created
|
// This ID check is masked to low 32-bit as a toleration to ill-formed ROM created
|
||||||
|
|
Loading…
Reference in a new issue