diff options
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/service/am/am.cpp | 20 | 
1 files changed, 16 insertions, 4 deletions
| diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp index 1bb544dd8..24cfb370b 100644 --- a/src/core/hle/service/am/am.cpp +++ b/src/core/hle/service/am/am.cpp @@ -10,6 +10,7 @@  #include "core/core.h"  #include "core/file_sys/control_metadata.h"  #include "core/file_sys/patch_manager.h" +#include "core/file_sys/registered_cache.h"  #include "core/file_sys/savedata_factory.h"  #include "core/hle/ipc_helpers.h"  #include "core/hle/kernel/kernel.h" @@ -1353,14 +1354,25 @@ void IApplicationFunctions::GetDisplayVersion(Kernel::HLERequestContext& ctx) {      std::array<u8, 0x10> version_string{}; -    FileSys::PatchManager pm{system.CurrentProcess()->GetTitleID()}; -    const auto res = pm.GetControlMetadata(); +    const auto res = [this] { +        const auto title_id = system.CurrentProcess()->GetTitleID(); + +        FileSys::PatchManager pm{title_id}; +        auto res = pm.GetControlMetadata(); +        if (res.first != nullptr) { +            return res; +        } + +        FileSys::PatchManager pm_update{FileSys::GetUpdateTitleID(title_id)}; +        return pm_update.GetControlMetadata(); +    }(); +      if (res.first != nullptr) {          const auto& version = res.first->GetVersionString();          std::copy(version.begin(), version.end(), version_string.begin());      } else { -        constexpr u128 default_version = {1, 0}; -        std::memcpy(version_string.data(), default_version.data(), sizeof(u128)); +        constexpr char default_version[]{"1.0.0"}; +        std::memcpy(version_string.data(), default_version, sizeof(default_version));      }      IPC::ResponseBuilder rb{ctx, 6}; | 
