summaryrefslogtreecommitdiff
path: root/src/core/loader/loader.cpp
diff options
context:
space:
mode:
authorGravatar bunnei2020-11-24 15:27:22 -0800
committerGravatar GitHub2020-11-24 15:27:22 -0800
commit0832da3e4054d0b47c39e95553b5f3be5848eae9 (patch)
tree1e7688670225c60bbcbc2827cf427a67e1686404 /src/core/loader/loader.cpp
parenthle: services: Fix a crash with improper NVFlinger lifetime management. (#4977) (diff)
parentfrontend: yuzu (qt): Register a callback for ExecuteProgram. (diff)
downloadyuzu-0832da3e4054d0b47c39e95553b5f3be5848eae9.tar.gz
yuzu-0832da3e4054d0b47c39e95553b5f3be5848eae9.tar.xz
yuzu-0832da3e4054d0b47c39e95553b5f3be5848eae9.zip
Merge pull request #4799 from bunnei/execute-program
core: Refactor loader and implement ExecuteProgram
Diffstat (limited to 'src/core/loader/loader.cpp')
-rw-r--r--src/core/loader/loader.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/core/loader/loader.cpp b/src/core/loader/loader.cpp
index deffe7379..d91c15561 100644
--- a/src/core/loader/loader.cpp
+++ b/src/core/loader/loader.cpp
@@ -198,10 +198,11 @@ AppLoader::~AppLoader() = default;
198 * @param system The system context to use. 198 * @param system The system context to use.
199 * @param file The file to retrieve the loader for 199 * @param file The file to retrieve the loader for
200 * @param type The file type 200 * @param type The file type
201 * @param program_index Specifies the index within the container of the program to launch.
201 * @return std::unique_ptr<AppLoader> a pointer to a loader object; nullptr for unsupported type 202 * @return std::unique_ptr<AppLoader> a pointer to a loader object; nullptr for unsupported type
202 */ 203 */
203static std::unique_ptr<AppLoader> GetFileLoader(Core::System& system, FileSys::VirtualFile file, 204static std::unique_ptr<AppLoader> GetFileLoader(Core::System& system, FileSys::VirtualFile file,
204 FileType type) { 205 FileType type, std::size_t program_index) {
205 switch (type) { 206 switch (type) {
206 // Standard ELF file format. 207 // Standard ELF file format.
207 case FileType::ELF: 208 case FileType::ELF:
@@ -222,7 +223,7 @@ static std::unique_ptr<AppLoader> GetFileLoader(Core::System& system, FileSys::V
222 // NX XCI (nX Card Image) file format. 223 // NX XCI (nX Card Image) file format.
223 case FileType::XCI: 224 case FileType::XCI:
224 return std::make_unique<AppLoader_XCI>(std::move(file), system.GetFileSystemController(), 225 return std::make_unique<AppLoader_XCI>(std::move(file), system.GetFileSystemController(),
225 system.GetContentProvider()); 226 system.GetContentProvider(), program_index);
226 227
227 // NX NAX (NintendoAesXts) file format. 228 // NX NAX (NintendoAesXts) file format.
228 case FileType::NAX: 229 case FileType::NAX:
@@ -231,7 +232,7 @@ static std::unique_ptr<AppLoader> GetFileLoader(Core::System& system, FileSys::V
231 // NX NSP (Nintendo Submission Package) file format 232 // NX NSP (Nintendo Submission Package) file format
232 case FileType::NSP: 233 case FileType::NSP:
233 return std::make_unique<AppLoader_NSP>(std::move(file), system.GetFileSystemController(), 234 return std::make_unique<AppLoader_NSP>(std::move(file), system.GetFileSystemController(),
234 system.GetContentProvider()); 235 system.GetContentProvider(), program_index);
235 236
236 // NX KIP (Kernel Internal Process) file format 237 // NX KIP (Kernel Internal Process) file format
237 case FileType::KIP: 238 case FileType::KIP:
@@ -246,7 +247,8 @@ static std::unique_ptr<AppLoader> GetFileLoader(Core::System& system, FileSys::V
246 } 247 }
247} 248}
248 249
249std::unique_ptr<AppLoader> GetLoader(Core::System& system, FileSys::VirtualFile file) { 250std::unique_ptr<AppLoader> GetLoader(Core::System& system, FileSys::VirtualFile file,
251 std::size_t program_index) {
250 FileType type = IdentifyFile(file); 252 FileType type = IdentifyFile(file);
251 const FileType filename_type = GuessFromFilename(file->GetName()); 253 const FileType filename_type = GuessFromFilename(file->GetName());
252 254
@@ -260,7 +262,7 @@ std::unique_ptr<AppLoader> GetLoader(Core::System& system, FileSys::VirtualFile
260 262
261 LOG_DEBUG(Loader, "Loading file {} as {}...", file->GetName(), GetFileTypeString(type)); 263 LOG_DEBUG(Loader, "Loading file {} as {}...", file->GetName(), GetFileTypeString(type));
262 264
263 return GetFileLoader(system, std::move(file), type); 265 return GetFileLoader(system, std::move(file), type, program_index);
264} 266}
265 267
266} // namespace Loader 268} // namespace Loader