diff options
| -rw-r--r-- | src/core/loader/loader.h | 8 | ||||
| -rw-r--r-- | src/core/loader/ncch.cpp | 15 | ||||
| -rw-r--r-- | src/core/loader/ncch.h | 5 | 
3 files changed, 19 insertions, 9 deletions
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<u32> Reference to Boost optional to store system mode. +     * @ return Result of operation.       */ -    virtual boost::optional<u32> LoadKernelSystemMode() { +    virtual ResultStatus LoadKernelSystemMode(boost::optional<u32>& 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<u32> AppLoader_NCCH::LoadKernelSystemMode() { +ResultStatus AppLoader_NCCH::LoadKernelSystemMode(boost::optional<u32>& 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<u32> Reference to Boost optional to store system mode. +     * @return Result of operation.       */ -    boost::optional<u32> LoadKernelSystemMode() override; +    ResultStatus LoadKernelSystemMode(boost::optional<u32>& system_mode) override;      ResultStatus ReadCode(std::vector<u8>& buffer) override;  | 
