|
|
|
@ -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;
|
|
|
|
|