|
|
@ -99,7 +99,7 @@ ContentRecordType GetCRTypeFromNCAType(NCAContentType type) { |
|
|
return ContentRecordType::Data; |
|
|
return ContentRecordType::Data; |
|
|
case NCAContentType::Manual: |
|
|
case NCAContentType::Manual: |
|
|
// TODO(DarkLordZach): Peek at NCA contents to differentiate Manual and Legal.
|
|
|
// TODO(DarkLordZach): Peek at NCA contents to differentiate Manual and Legal.
|
|
|
return ContentRecordType::Manual; |
|
|
|
|
|
|
|
|
return ContentRecordType::HtmlDocument; |
|
|
default: |
|
|
default: |
|
|
UNREACHABLE_MSG("Invalid NCAContentType={:02X}", static_cast<u8>(type)); |
|
|
UNREACHABLE_MSG("Invalid NCAContentType={:02X}", static_cast<u8>(type)); |
|
|
} |
|
|
} |
|
|
@ -397,8 +397,8 @@ InstallResult RegisteredCache::InstallEntry(const NSP& nsp, bool overwrite_if_ex |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
if (meta_iter == ncas.end()) { |
|
|
if (meta_iter == ncas.end()) { |
|
|
LOG_ERROR(Loader, "The XCI you are attempting to install does not have a metadata NCA and " |
|
|
|
|
|
"is therefore malformed. Double check your encryption keys."); |
|
|
|
|
|
|
|
|
LOG_ERROR(Loader, "The file you are attempting to install does not have a metadata NCA and " |
|
|
|
|
|
"is therefore malformed. Check your encryption keys."); |
|
|
return InstallResult::ErrorMetaFailed; |
|
|
return InstallResult::ErrorMetaFailed; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -415,6 +415,9 @@ InstallResult RegisteredCache::InstallEntry(const NSP& nsp, bool overwrite_if_ex |
|
|
const auto cnmt_file = section0->GetFiles()[0]; |
|
|
const auto cnmt_file = section0->GetFiles()[0]; |
|
|
const CNMT cnmt(cnmt_file); |
|
|
const CNMT cnmt(cnmt_file); |
|
|
for (const auto& record : cnmt.GetContentRecords()) { |
|
|
for (const auto& record : cnmt.GetContentRecords()) { |
|
|
|
|
|
// Ignore DeltaFragments, they are not useful to us
|
|
|
|
|
|
if (record.type == ContentRecordType::DeltaFragment) |
|
|
|
|
|
continue; |
|
|
const auto nca = GetNCAFromNSPForID(nsp, record.nca_id); |
|
|
const auto nca = GetNCAFromNSPForID(nsp, record.nca_id); |
|
|
if (nca == nullptr) |
|
|
if (nca == nullptr) |
|
|
return InstallResult::ErrorCopyFailed; |
|
|
return InstallResult::ErrorCopyFailed; |
|
|
|