diff options
| author | 2016-04-14 00:04:05 +0300 | |
|---|---|---|
| committer | 2016-05-04 13:02:49 +0300 | |
| commit | 5d5dd66d9222ced82dd61747ef4078fc1eae2496 (patch) | |
| tree | e7495d933b0fbdc767426fc18940f95b7817c8ab /src/core/loader/loader.cpp | |
| parent | Merge pull request #1726 from MerryMage/read-write-region (diff) | |
| download | yuzu-5d5dd66d9222ced82dd61747ef4078fc1eae2496.tar.gz yuzu-5d5dd66d9222ced82dd61747ef4078fc1eae2496.tar.xz yuzu-5d5dd66d9222ced82dd61747ef4078fc1eae2496.zip | |
add icon & title to game list
Diffstat (limited to 'src/core/loader/loader.cpp')
| -rw-r--r-- | src/core/loader/loader.cpp | 50 |
1 files changed, 31 insertions, 19 deletions
diff --git a/src/core/loader/loader.cpp b/src/core/loader/loader.cpp index 886501c41..0d4c1d351 100644 --- a/src/core/loader/loader.cpp +++ b/src/core/loader/loader.cpp | |||
| @@ -90,6 +90,28 @@ const char* GetFileTypeString(FileType type) { | |||
| 90 | return "unknown"; | 90 | return "unknown"; |
| 91 | } | 91 | } |
| 92 | 92 | ||
| 93 | std::unique_ptr<AppLoader> GetLoader(FileUtil::IOFile&& file, FileType type, | ||
| 94 | const std::string& filename, const std::string& filepath) { | ||
| 95 | switch (type) { | ||
| 96 | |||
| 97 | // 3DSX file format. | ||
| 98 | case FileType::THREEDSX: | ||
| 99 | return std::make_unique<AppLoader_THREEDSX>(std::move(file), filename, filepath); | ||
| 100 | |||
| 101 | // Standard ELF file format. | ||
| 102 | case FileType::ELF: | ||
| 103 | return std::make_unique<AppLoader_ELF>(std::move(file), filename); | ||
| 104 | |||
| 105 | // NCCH/NCSD container formats. | ||
| 106 | case FileType::CXI: | ||
| 107 | case FileType::CCI: | ||
| 108 | return std::make_unique<AppLoader_NCCH>(std::move(file), filepath); | ||
| 109 | |||
| 110 | default: | ||
| 111 | return std::unique_ptr<AppLoader>(); | ||
| 112 | } | ||
| 113 | } | ||
| 114 | |||
| 93 | ResultStatus LoadFile(const std::string& filename) { | 115 | ResultStatus LoadFile(const std::string& filename) { |
| 94 | FileUtil::IOFile file(filename, "rb"); | 116 | FileUtil::IOFile file(filename, "rb"); |
| 95 | if (!file.IsOpen()) { | 117 | if (!file.IsOpen()) { |
| @@ -111,15 +133,19 @@ ResultStatus LoadFile(const std::string& filename) { | |||
| 111 | 133 | ||
| 112 | LOG_INFO(Loader, "Loading file %s as %s...", filename.c_str(), GetFileTypeString(type)); | 134 | LOG_INFO(Loader, "Loading file %s as %s...", filename.c_str(), GetFileTypeString(type)); |
| 113 | 135 | ||
| 136 | std::unique_ptr<AppLoader> app_loader = GetLoader(std::move(file), type, filename_filename, filename); | ||
| 137 | |||
| 114 | switch (type) { | 138 | switch (type) { |
| 115 | 139 | ||
| 116 | //3DSX file format... | 140 | // 3DSX file format... |
| 141 | // or NCCH/NCSD container formats... | ||
| 117 | case FileType::THREEDSX: | 142 | case FileType::THREEDSX: |
| 143 | case FileType::CXI: | ||
| 144 | case FileType::CCI: | ||
| 118 | { | 145 | { |
| 119 | AppLoader_THREEDSX app_loader(std::move(file), filename_filename, filename); | ||
| 120 | // Load application and RomFS | 146 | // Load application and RomFS |
| 121 | if (ResultStatus::Success == app_loader.Load()) { | 147 | if (ResultStatus::Success == app_loader->Load()) { |
| 122 | Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_RomFS>(app_loader), Service::FS::ArchiveIdCode::RomFS); | 148 | Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_RomFS>(*app_loader), Service::FS::ArchiveIdCode::RomFS); |
| 123 | return ResultStatus::Success; | 149 | return ResultStatus::Success; |
| 124 | } | 150 | } |
| 125 | break; | 151 | break; |
| @@ -127,21 +153,7 @@ ResultStatus LoadFile(const std::string& filename) { | |||
| 127 | 153 | ||
| 128 | // Standard ELF file format... | 154 | // Standard ELF file format... |
| 129 | case FileType::ELF: | 155 | case FileType::ELF: |
| 130 | return AppLoader_ELF(std::move(file), filename_filename).Load(); | 156 | return app_loader->Load(); |
| 131 | |||
| 132 | // NCCH/NCSD container formats... | ||
| 133 | case FileType::CXI: | ||
| 134 | case FileType::CCI: | ||
| 135 | { | ||
| 136 | AppLoader_NCCH app_loader(std::move(file), filename); | ||
| 137 | |||
| 138 | // Load application and RomFS | ||
| 139 | ResultStatus result = app_loader.Load(); | ||
| 140 | if (ResultStatus::Success == result) { | ||
| 141 | Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_RomFS>(app_loader), Service::FS::ArchiveIdCode::RomFS); | ||
| 142 | } | ||
| 143 | return result; | ||
| 144 | } | ||
| 145 | 157 | ||
| 146 | // CIA file format... | 158 | // CIA file format... |
| 147 | case FileType::CIA: | 159 | case FileType::CIA: |