diff options
author | Liam <byteslice@airmail.cc> | 2023-09-12 05:50:36 +0200 |
---|---|---|
committer | Liam <byteslice@airmail.cc> | 2023-09-12 15:20:50 +0200 |
commit | f8985d1cc5f7378ab2bca2526a61d6aff778d36e (patch) | |
tree | e7f492f817486b30549351951163df3ac0b8f20e /src/core/file_sys/registered_cache.cpp | |
parent | ci: fix msvc when used with LTO (#11459) (diff) | |
download | yuzu-f8985d1cc5f7378ab2bca2526a61d6aff778d36e.tar yuzu-f8985d1cc5f7378ab2bca2526a61d6aff778d36e.tar.gz yuzu-f8985d1cc5f7378ab2bca2526a61d6aff778d36e.tar.bz2 yuzu-f8985d1cc5f7378ab2bca2526a61d6aff778d36e.tar.lz yuzu-f8985d1cc5f7378ab2bca2526a61d6aff778d36e.tar.xz yuzu-f8985d1cc5f7378ab2bca2526a61d6aff778d36e.tar.zst yuzu-f8985d1cc5f7378ab2bca2526a61d6aff778d36e.zip |
Diffstat (limited to 'src/core/file_sys/registered_cache.cpp')
-rw-r--r-- | src/core/file_sys/registered_cache.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/core/file_sys/registered_cache.cpp b/src/core/file_sys/registered_cache.cpp index f70adab82..e33b00d89 100644 --- a/src/core/file_sys/registered_cache.cpp +++ b/src/core/file_sys/registered_cache.cpp @@ -9,6 +9,7 @@ #include "common/fs/path_util.h" #include "common/hex_util.h" #include "common/logging/log.h" +#include "common/scope_exit.h" #include "core/crypto/key_manager.h" #include "core/file_sys/card_image.h" #include "core/file_sys/common_funcs.h" @@ -625,7 +626,7 @@ InstallResult RegisteredCache::InstallEntry(const NSP& nsp, bool overwrite_if_ex nca->GetTitleId() != title_id) { // Create fake cnmt for patch to multiprogram application const auto sub_nca_result = - InstallEntry(*nca, TitleType::Update, overwrite_if_exists, copy); + InstallEntry(*nca, cnmt.GetHeader(), record, overwrite_if_exists, copy); if (sub_nca_result != InstallResult::Success) { return sub_nca_result; } @@ -672,6 +673,31 @@ InstallResult RegisteredCache::InstallEntry(const NCA& nca, TitleType type, return RawInstallNCA(nca, copy, overwrite_if_exists, c_rec.nca_id); } +InstallResult RegisteredCache::InstallEntry(const NCA& nca, const CNMTHeader& base_header, + const ContentRecord& base_record, + bool overwrite_if_exists, const VfsCopyFunction& copy) { + const CNMTHeader header{ + .title_id = nca.GetTitleId(), + .title_version = base_header.title_version, + .type = base_header.type, + .reserved = {}, + .table_offset = 0x10, + .number_content_entries = 1, + .number_meta_entries = 0, + .attributes = 0, + .reserved2 = {}, + .is_committed = 0, + .required_download_system_version = 0, + .reserved3 = {}, + }; + const OptionalHeader opt_header{0, 0}; + const CNMT new_cnmt(header, opt_header, {base_record}, {}); + if (!RawInstallYuzuMeta(new_cnmt)) { + return InstallResult::ErrorMetaFailed; + } + return RawInstallNCA(nca, copy, overwrite_if_exists, base_record.nca_id); +} + bool RegisteredCache::RemoveExistingEntry(u64 title_id) const { bool removed_data = false; |