summaryrefslogtreecommitdiffstats
path: root/src/core/file_sys
diff options
context:
space:
mode:
authorZach Hilman <zachhilman@gmail.com>2019-06-26 04:25:10 +0200
committerZach Hilman <zachhilman@gmail.com>2019-06-26 04:25:10 +0200
commitd10fc2d7277cf075f875fe2831501cb79c50e21a (patch)
treea1ef0e65dfd79f8badde8dcd24014432428c51f8 /src/core/file_sys
parentcore: Keep track of ARPManager and register current application on boot (diff)
downloadyuzu-d10fc2d7277cf075f875fe2831501cb79c50e21a.tar
yuzu-d10fc2d7277cf075f875fe2831501cb79c50e21a.tar.gz
yuzu-d10fc2d7277cf075f875fe2831501cb79c50e21a.tar.bz2
yuzu-d10fc2d7277cf075f875fe2831501cb79c50e21a.tar.lz
yuzu-d10fc2d7277cf075f875fe2831501cb79c50e21a.tar.xz
yuzu-d10fc2d7277cf075f875fe2831501cb79c50e21a.tar.zst
yuzu-d10fc2d7277cf075f875fe2831501cb79c50e21a.zip
Diffstat (limited to 'src/core/file_sys')
-rw-r--r--src/core/file_sys/patch_manager.h3
-rw-r--r--src/core/file_sys/registered_cache.cpp14
2 files changed, 10 insertions, 7 deletions
diff --git a/src/core/file_sys/patch_manager.h b/src/core/file_sys/patch_manager.h
index f82b4ae1e..a363c6577 100644
--- a/src/core/file_sys/patch_manager.h
+++ b/src/core/file_sys/patch_manager.h
@@ -66,6 +66,9 @@ public:
std::map<std::string, std::string, std::less<>> GetPatchVersionNames(
VirtualFile update_raw = nullptr) const;
+ // If the game update exists, returns the u32 version field in its Meta-type NCA. If that fails,
+ // it will fallback to the Meta-type NCA of the base game. If that fails, the result will be
+ // std::nullopt
std::optional<u32> GetGameVersion() const;
// Given title_id of the program, attempts to get the control data of the update and parse
diff --git a/src/core/file_sys/registered_cache.cpp b/src/core/file_sys/registered_cache.cpp
index 3bb921210..4608490e0 100644
--- a/src/core/file_sys/registered_cache.cpp
+++ b/src/core/file_sys/registered_cache.cpp
@@ -647,16 +647,16 @@ ContentProviderUnion::ListEntriesFilterOrigin(std::optional<ContentProviderUnion
std::optional<ContentProviderUnionSlot> ContentProviderUnion::GetSlotForEntry(
u64 title_id, ContentRecordType type) const {
- for (const auto& [slot, provider] : providers) {
- if (provider == nullptr)
- continue;
+ const auto iter =
+ std::find_if(providers.begin(), providers.end(), [title_id, type](const auto& provider) {
+ return provider.second != nullptr && provider.second->HasEntry(title_id, type);
+ });
- if (provider->HasEntry(title_id, type)) {
- return slot;
- }
+ if (iter == providers.end()) {
+ return std::nullopt;
}
- return std::nullopt;
+ return iter->first;
}
ManualContentProvider::~ManualContentProvider() = default;