[Kernel] Runtime Module Patching

Fixes source games TUs
This commit is contained in:
Adrian 2023-09-22 19:23:32 +01:00 committed by Radosław Gliński
parent 616dbfe34e
commit 2c087406d6
2 changed files with 14 additions and 1 deletions

View File

@ -553,7 +553,19 @@ X_RESULT KernelState::ApplyTitleUpdate(const object_ref<UserModule> module) {
content_manager()->OpenContent("UPDATE", title_update, disc_number);
// Use the corresponding patch for the launch module
std::filesystem::path patch_xexp = fmt::format("{0}.xexp", module->name());
std::filesystem::path patch_xexp;
std::string mount_path = "";
file_system()->FindSymbolicLink("game:", mount_path);
auto is_relative = std::filesystem::relative(module->path(), mount_path);
if (is_relative.empty()) {
return X_STATUS_UNSUCCESSFUL;
}
patch_xexp =
is_relative.replace_extension(is_relative.extension().string() + "p");
std::string resolved_path = "";
file_system()->FindSymbolicLink("UPDATE:", resolved_path);

View File

@ -118,6 +118,7 @@ dword_result_t xeXexLoadImage(
// Not found; attempt to load as a user module.
auto user_module = load_callback();
if (user_module) {
kernel_state()->ApplyTitleUpdate(user_module);
kernel_state()->FinishLoadingUserModule(user_module);
// Give up object ownership, this reference will be released by the last
// XexUnloadImage call