|
|
|
@ -621,25 +621,25 @@ InstallResult RegisteredCache::InstallEntry(const NSP& nsp, bool overwrite_if_ex |
|
|
|
|
|
|
|
InstallResult RegisteredCache::InstallEntry(const NCA& nca, TitleType type, |
|
|
|
bool overwrite_if_exists, const VfsCopyFunction& copy) { |
|
|
|
CNMTHeader header{ |
|
|
|
nca.GetTitleId(), // Title ID
|
|
|
|
0, // Ignore/Default title version
|
|
|
|
type, // Type
|
|
|
|
{}, // Padding
|
|
|
|
0x10, // Default table offset
|
|
|
|
1, // 1 Content Entry
|
|
|
|
0, // No Meta Entries
|
|
|
|
{}, // Padding
|
|
|
|
{}, // Reserved 1
|
|
|
|
0, // Is committed
|
|
|
|
0, // Required download system version
|
|
|
|
{}, // Reserved 2
|
|
|
|
const CNMTHeader header{ |
|
|
|
.title_id = nca.GetTitleId(), |
|
|
|
.title_version = 0, |
|
|
|
.type = 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 = {}, |
|
|
|
}; |
|
|
|
OptionalHeader opt_header{0, 0}; |
|
|
|
const OptionalHeader opt_header{0, 0}; |
|
|
|
ContentRecord c_rec{{}, {}, {}, GetCRTypeFromNCAType(nca.GetType()), {}}; |
|
|
|
const auto& data = nca.GetBaseFile()->ReadBytes(0x100000); |
|
|
|
mbedtls_sha256_ret(data.data(), data.size(), c_rec.hash.data(), 0); |
|
|
|
memcpy(&c_rec.nca_id, &c_rec.hash, 16); |
|
|
|
std::memcpy(&c_rec.nca_id, &c_rec.hash, 16); |
|
|
|
const CNMT new_cnmt(header, opt_header, {c_rec}, {}); |
|
|
|
if (!RawInstallYuzuMeta(new_cnmt)) { |
|
|
|
return InstallResult::ErrorMetaFailed; |
|
|
|
|