diff options
| author | 2018-11-27 19:20:12 -0500 | |
|---|---|---|
| committer | 2018-11-27 19:20:12 -0500 | |
| commit | adb882bf909a1acfaa9d55a6a9fea64b428c9510 (patch) | |
| tree | 24770715215581b9c3b49d6ac80d837bc3b579a9 /src/core | |
| parent | Merge pull request #1811 from lioncash/input (diff) | |
| parent | file_sys/registered_cache: Remove unused <map> include (diff) | |
| download | yuzu-adb882bf909a1acfaa9d55a6a9fea64b428c9510.tar.gz yuzu-adb882bf909a1acfaa9d55a6a9fea64b428c9510.tar.xz yuzu-adb882bf909a1acfaa9d55a6a9fea64b428c9510.zip | |
Merge pull request #1814 from lioncash/ptr
file_sys/registered_cache: Use regular const references instead of std::shared_ptr for InstallEntry()
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/file_sys/registered_cache.cpp | 44 | ||||
| -rw-r--r-- | src/core/file_sys/registered_cache.h | 10 |
2 files changed, 26 insertions, 28 deletions
diff --git a/src/core/file_sys/registered_cache.cpp b/src/core/file_sys/registered_cache.cpp index a3f8f2f73..07c3af64a 100644 --- a/src/core/file_sys/registered_cache.cpp +++ b/src/core/file_sys/registered_cache.cpp | |||
| @@ -381,22 +381,22 @@ std::vector<RegisteredCacheEntry> RegisteredCache::ListEntriesFilter( | |||
| 381 | return out; | 381 | return out; |
| 382 | } | 382 | } |
| 383 | 383 | ||
| 384 | static std::shared_ptr<NCA> GetNCAFromNSPForID(std::shared_ptr<NSP> nsp, const NcaID& id) { | 384 | static std::shared_ptr<NCA> GetNCAFromNSPForID(const NSP& nsp, const NcaID& id) { |
| 385 | const auto file = nsp->GetFile(fmt::format("{}.nca", Common::HexArrayToString(id, false))); | 385 | const auto file = nsp.GetFile(fmt::format("{}.nca", Common::HexArrayToString(id, false))); |
| 386 | if (file == nullptr) | 386 | if (file == nullptr) |
| 387 | return nullptr; | 387 | return nullptr; |
| 388 | return std::make_shared<NCA>(file); | 388 | return std::make_shared<NCA>(file); |
| 389 | } | 389 | } |
| 390 | 390 | ||
| 391 | InstallResult RegisteredCache::InstallEntry(std::shared_ptr<XCI> xci, bool overwrite_if_exists, | 391 | InstallResult RegisteredCache::InstallEntry(const XCI& xci, bool overwrite_if_exists, |
| 392 | const VfsCopyFunction& copy) { | 392 | const VfsCopyFunction& copy) { |
| 393 | return InstallEntry(xci->GetSecurePartitionNSP(), overwrite_if_exists, copy); | 393 | return InstallEntry(*xci.GetSecurePartitionNSP(), overwrite_if_exists, copy); |
| 394 | } | 394 | } |
| 395 | 395 | ||
| 396 | InstallResult RegisteredCache::InstallEntry(std::shared_ptr<NSP> nsp, bool overwrite_if_exists, | 396 | InstallResult RegisteredCache::InstallEntry(const NSP& nsp, bool overwrite_if_exists, |
| 397 | const VfsCopyFunction& copy) { | 397 | const VfsCopyFunction& copy) { |
| 398 | const auto& ncas = nsp->GetNCAsCollapsed(); | 398 | const auto ncas = nsp.GetNCAsCollapsed(); |
| 399 | const auto& meta_iter = std::find_if(ncas.begin(), ncas.end(), [](std::shared_ptr<NCA> nca) { | 399 | const auto meta_iter = std::find_if(ncas.begin(), ncas.end(), [](const auto& nca) { |
| 400 | return nca->GetType() == NCAContentType::Meta; | 400 | return nca->GetType() == NCAContentType::Meta; |
| 401 | }); | 401 | }); |
| 402 | 402 | ||
| @@ -410,7 +410,7 @@ InstallResult RegisteredCache::InstallEntry(std::shared_ptr<NSP> nsp, bool overw | |||
| 410 | const auto meta_id_raw = (*meta_iter)->GetName().substr(0, 32); | 410 | const auto meta_id_raw = (*meta_iter)->GetName().substr(0, 32); |
| 411 | const auto meta_id = Common::HexStringToArray<16>(meta_id_raw); | 411 | const auto meta_id = Common::HexStringToArray<16>(meta_id_raw); |
| 412 | 412 | ||
| 413 | const auto res = RawInstallNCA(*meta_iter, copy, overwrite_if_exists, meta_id); | 413 | const auto res = RawInstallNCA(**meta_iter, copy, overwrite_if_exists, meta_id); |
| 414 | if (res != InstallResult::Success) | 414 | if (res != InstallResult::Success) |
| 415 | return res; | 415 | return res; |
| 416 | 416 | ||
| @@ -422,7 +422,7 @@ InstallResult RegisteredCache::InstallEntry(std::shared_ptr<NSP> nsp, bool overw | |||
| 422 | const auto nca = GetNCAFromNSPForID(nsp, record.nca_id); | 422 | const auto nca = GetNCAFromNSPForID(nsp, record.nca_id); |
| 423 | if (nca == nullptr) | 423 | if (nca == nullptr) |
| 424 | return InstallResult::ErrorCopyFailed; | 424 | return InstallResult::ErrorCopyFailed; |
| 425 | const auto res2 = RawInstallNCA(nca, copy, overwrite_if_exists, record.nca_id); | 425 | const auto res2 = RawInstallNCA(*nca, copy, overwrite_if_exists, record.nca_id); |
| 426 | if (res2 != InstallResult::Success) | 426 | if (res2 != InstallResult::Success) |
| 427 | return res2; | 427 | return res2; |
| 428 | } | 428 | } |
| @@ -431,21 +431,21 @@ InstallResult RegisteredCache::InstallEntry(std::shared_ptr<NSP> nsp, bool overw | |||
| 431 | return InstallResult::Success; | 431 | return InstallResult::Success; |
| 432 | } | 432 | } |
| 433 | 433 | ||
| 434 | InstallResult RegisteredCache::InstallEntry(std::shared_ptr<NCA> nca, TitleType type, | 434 | InstallResult RegisteredCache::InstallEntry(const NCA& nca, TitleType type, |
| 435 | bool overwrite_if_exists, const VfsCopyFunction& copy) { | 435 | bool overwrite_if_exists, const VfsCopyFunction& copy) { |
| 436 | CNMTHeader header{ | 436 | CNMTHeader header{ |
| 437 | nca->GetTitleId(), ///< Title ID | 437 | nca.GetTitleId(), ///< Title ID |
| 438 | 0, ///< Ignore/Default title version | 438 | 0, ///< Ignore/Default title version |
| 439 | type, ///< Type | 439 | type, ///< Type |
| 440 | {}, ///< Padding | 440 | {}, ///< Padding |
| 441 | 0x10, ///< Default table offset | 441 | 0x10, ///< Default table offset |
| 442 | 1, ///< 1 Content Entry | 442 | 1, ///< 1 Content Entry |
| 443 | 0, ///< No Meta Entries | 443 | 0, ///< No Meta Entries |
| 444 | {}, ///< Padding | 444 | {}, ///< Padding |
| 445 | }; | 445 | }; |
| 446 | OptionalHeader opt_header{0, 0}; | 446 | OptionalHeader opt_header{0, 0}; |
| 447 | ContentRecord c_rec{{}, {}, {}, GetCRTypeFromNCAType(nca->GetType()), {}}; | 447 | ContentRecord c_rec{{}, {}, {}, GetCRTypeFromNCAType(nca.GetType()), {}}; |
| 448 | const auto& data = nca->GetBaseFile()->ReadBytes(0x100000); | 448 | const auto& data = nca.GetBaseFile()->ReadBytes(0x100000); |
| 449 | mbedtls_sha256(data.data(), data.size(), c_rec.hash.data(), 0); | 449 | mbedtls_sha256(data.data(), data.size(), c_rec.hash.data(), 0); |
| 450 | memcpy(&c_rec.nca_id, &c_rec.hash, 16); | 450 | memcpy(&c_rec.nca_id, &c_rec.hash, 16); |
| 451 | const CNMT new_cnmt(header, opt_header, {c_rec}, {}); | 451 | const CNMT new_cnmt(header, opt_header, {c_rec}, {}); |
| @@ -454,10 +454,10 @@ InstallResult RegisteredCache::InstallEntry(std::shared_ptr<NCA> nca, TitleType | |||
| 454 | return RawInstallNCA(nca, copy, overwrite_if_exists, c_rec.nca_id); | 454 | return RawInstallNCA(nca, copy, overwrite_if_exists, c_rec.nca_id); |
| 455 | } | 455 | } |
| 456 | 456 | ||
| 457 | InstallResult RegisteredCache::RawInstallNCA(std::shared_ptr<NCA> nca, const VfsCopyFunction& copy, | 457 | InstallResult RegisteredCache::RawInstallNCA(const NCA& nca, const VfsCopyFunction& copy, |
| 458 | bool overwrite_if_exists, | 458 | bool overwrite_if_exists, |
| 459 | std::optional<NcaID> override_id) { | 459 | std::optional<NcaID> override_id) { |
| 460 | const auto in = nca->GetBaseFile(); | 460 | const auto in = nca.GetBaseFile(); |
| 461 | Core::Crypto::SHA256Hash hash{}; | 461 | Core::Crypto::SHA256Hash hash{}; |
| 462 | 462 | ||
| 463 | // Calculate NcaID | 463 | // Calculate NcaID |
diff --git a/src/core/file_sys/registered_cache.h b/src/core/file_sys/registered_cache.h index 6b89db8de..3b77af4e0 100644 --- a/src/core/file_sys/registered_cache.h +++ b/src/core/file_sys/registered_cache.h | |||
| @@ -6,7 +6,6 @@ | |||
| 6 | 6 | ||
| 7 | #include <array> | 7 | #include <array> |
| 8 | #include <functional> | 8 | #include <functional> |
| 9 | #include <map> | ||
| 10 | #include <memory> | 9 | #include <memory> |
| 11 | #include <string> | 10 | #include <string> |
| 12 | #include <vector> | 11 | #include <vector> |
| @@ -104,17 +103,16 @@ public: | |||
| 104 | 103 | ||
| 105 | // Raw copies all the ncas from the xci/nsp to the csache. Does some quick checks to make sure | 104 | // Raw copies all the ncas from the xci/nsp to the csache. Does some quick checks to make sure |
| 106 | // there is a meta NCA and all of them are accessible. | 105 | // there is a meta NCA and all of them are accessible. |
| 107 | InstallResult InstallEntry(std::shared_ptr<XCI> xci, bool overwrite_if_exists = false, | 106 | InstallResult InstallEntry(const XCI& xci, bool overwrite_if_exists = false, |
| 108 | const VfsCopyFunction& copy = &VfsRawCopy); | 107 | const VfsCopyFunction& copy = &VfsRawCopy); |
| 109 | InstallResult InstallEntry(std::shared_ptr<NSP> nsp, bool overwrite_if_exists = false, | 108 | InstallResult InstallEntry(const NSP& nsp, bool overwrite_if_exists = false, |
| 110 | const VfsCopyFunction& copy = &VfsRawCopy); | 109 | const VfsCopyFunction& copy = &VfsRawCopy); |
| 111 | 110 | ||
| 112 | // Due to the fact that we must use Meta-type NCAs to determine the existance of files, this | 111 | // Due to the fact that we must use Meta-type NCAs to determine the existance of files, this |
| 113 | // poses quite a challenge. Instead of creating a new meta NCA for this file, yuzu will create a | 112 | // poses quite a challenge. Instead of creating a new meta NCA for this file, yuzu will create a |
| 114 | // dir inside the NAND called 'yuzu_meta' and store the raw CNMT there. | 113 | // dir inside the NAND called 'yuzu_meta' and store the raw CNMT there. |
| 115 | // TODO(DarkLordZach): Author real meta-type NCAs and install those. | 114 | // TODO(DarkLordZach): Author real meta-type NCAs and install those. |
| 116 | InstallResult InstallEntry(std::shared_ptr<NCA> nca, TitleType type, | 115 | InstallResult InstallEntry(const NCA& nca, TitleType type, bool overwrite_if_exists = false, |
| 117 | bool overwrite_if_exists = false, | ||
| 118 | const VfsCopyFunction& copy = &VfsRawCopy); | 116 | const VfsCopyFunction& copy = &VfsRawCopy); |
| 119 | 117 | ||
| 120 | private: | 118 | private: |
| @@ -128,7 +126,7 @@ private: | |||
| 128 | std::optional<NcaID> GetNcaIDFromMetadata(u64 title_id, ContentRecordType type) const; | 126 | std::optional<NcaID> GetNcaIDFromMetadata(u64 title_id, ContentRecordType type) const; |
| 129 | VirtualFile GetFileAtID(NcaID id) const; | 127 | VirtualFile GetFileAtID(NcaID id) const; |
| 130 | VirtualFile OpenFileOrDirectoryConcat(const VirtualDir& dir, std::string_view path) const; | 128 | VirtualFile OpenFileOrDirectoryConcat(const VirtualDir& dir, std::string_view path) const; |
| 131 | InstallResult RawInstallNCA(std::shared_ptr<NCA> nca, const VfsCopyFunction& copy, | 129 | InstallResult RawInstallNCA(const NCA& nca, const VfsCopyFunction& copy, |
| 132 | bool overwrite_if_exists, std::optional<NcaID> override_id = {}); | 130 | bool overwrite_if_exists, std::optional<NcaID> override_id = {}); |
| 133 | bool RawInstallYuzuMeta(const CNMT& cnmt); | 131 | bool RawInstallYuzuMeta(const CNMT& cnmt); |
| 134 | 132 | ||