diff --git a/src/core/loader/loader.h b/src/core/loader/loader.h index 1d80766ae..21f73503e 100644 --- a/src/core/loader/loader.h +++ b/src/core/loader/loader.h @@ -100,11 +100,13 @@ public: * Loads the system mode that this application needs. * This function defaults to 2 (96MB allocated to the application) if it can't read the * information. - * @returns Optional with the kernel system mode + * @param boost::optional Reference to Boost optional to store system mode. + * @ return Result of operation. */ - virtual boost::optional LoadKernelSystemMode() { + virtual ResultStatus LoadKernelSystemMode(boost::optional& system_mode) { // 96MB allocated to the application. - return 2; + system_mode = 2; + return ResultStatus::Success; } /** diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp index beeb13ffa..1a20762e4 100644 --- a/src/core/loader/ncch.cpp +++ b/src/core/loader/ncch.cpp @@ -121,12 +121,19 @@ FileType AppLoader_NCCH::IdentifyType(FileUtil::IOFile& file) { return FileType::Error; } -boost::optional AppLoader_NCCH::LoadKernelSystemMode() { +ResultStatus AppLoader_NCCH::LoadKernelSystemMode(boost::optional& system_mode) { if (!is_loaded) { - if (LoadExeFS() != ResultStatus::Success) - return boost::none; + ResultStatus res = LoadExeFS(); + if (res != ResultStatus::Success) { + // Set the system mode as invalid. + system_mode = boost::none; + // Return the error code. + return res; + } } - return exheader_header.arm11_system_local_caps.system_mode.Value(); + // Set the system mode as the one from the exheader. + system_mode = exheader_header.arm11_system_local_caps.system_mode.Value(); + return ResultStatus::Success; } ResultStatus AppLoader_NCCH::LoadExec() { diff --git a/src/core/loader/ncch.h b/src/core/loader/ncch.h index 4ef95b5c6..269fe4f49 100644 --- a/src/core/loader/ncch.h +++ b/src/core/loader/ncch.h @@ -179,9 +179,10 @@ public: /** * Loads the Exheader and returns the system mode for this application. - * @return Optional with the kernel system mode + * @param boost::optional Reference to Boost optional to store system mode. + * @return Result of operation. */ - boost::optional LoadKernelSystemMode() override; + ResultStatus LoadKernelSystemMode(boost::optional& system_mode) override; ResultStatus ReadCode(std::vector& buffer) override;