diff options
| author | 2015-01-06 21:30:40 +0000 | |
|---|---|---|
| committer | 2015-01-15 21:21:26 +0000 | |
| commit | b5237e885df72f6c37532fc8af9573966e7b07e5 (patch) | |
| tree | fdfd4da299cc2779f35fcc30e770b85b9e710166 /src/core/loader/elf.cpp | |
| parent | Loader: Initialize the default NCCH values in the class declaration, not in t... (diff) | |
| download | yuzu-b5237e885df72f6c37532fc8af9573966e7b07e5.tar.gz yuzu-b5237e885df72f6c37532fc8af9573966e7b07e5.tar.xz yuzu-b5237e885df72f6c37532fc8af9573966e7b07e5.zip | |
Loader: Keep a reference to the file and pass it to the correct AppLoader, instead of loading it multiple times.
Diffstat (limited to 'src/core/loader/elf.cpp')
| -rw-r--r-- | src/core/loader/elf.cpp | 30 |
1 files changed, 8 insertions, 22 deletions
diff --git a/src/core/loader/elf.cpp b/src/core/loader/elf.cpp index ee711d8b2..d1a1ef595 100644 --- a/src/core/loader/elf.cpp +++ b/src/core/loader/elf.cpp | |||
| @@ -330,34 +330,20 @@ bool ElfReader::LoadSymbols() { | |||
| 330 | 330 | ||
| 331 | namespace Loader { | 331 | namespace Loader { |
| 332 | 332 | ||
| 333 | /// AppLoader_ELF constructor | ||
| 334 | AppLoader_ELF::AppLoader_ELF(const std::string& filename) { | ||
| 335 | this->filename = filename; | ||
| 336 | } | ||
| 337 | |||
| 338 | /// AppLoader_NCCH destructor | ||
| 339 | AppLoader_ELF::~AppLoader_ELF() { | ||
| 340 | } | ||
| 341 | |||
| 342 | ResultStatus AppLoader_ELF::Load() { | 333 | ResultStatus AppLoader_ELF::Load() { |
| 343 | LOG_INFO(Loader, "Loading ELF file %s...", filename.c_str()); | ||
| 344 | |||
| 345 | if (is_loaded) | 334 | if (is_loaded) |
| 346 | return ResultStatus::ErrorAlreadyLoaded; | 335 | return ResultStatus::ErrorAlreadyLoaded; |
| 347 | 336 | ||
| 348 | FileUtil::IOFile file(filename, "rb"); | 337 | if (!file->IsOpen()) |
| 338 | return ResultStatus::Error; | ||
| 349 | 339 | ||
| 350 | if (file.IsOpen()) { | 340 | u32 size = static_cast<u32>(file->GetSize()); |
| 351 | u32 size = (u32)file.GetSize(); | 341 | std::unique_ptr<u8[]> buffer(new u8[size]); |
| 352 | std::unique_ptr<u8[]> buffer(new u8[size]); | 342 | file->ReadBytes(&buffer[0], size); |
| 353 | file.ReadBytes(&buffer[0], size); | ||
| 354 | 343 | ||
| 355 | ElfReader elf_reader(&buffer[0]); | 344 | ElfReader elf_reader(&buffer[0]); |
| 356 | elf_reader.LoadInto(0x00100000); | 345 | elf_reader.LoadInto(0x00100000); |
| 357 | Kernel::LoadExec(elf_reader.GetEntryPoint()); | 346 | Kernel::LoadExec(elf_reader.GetEntryPoint()); |
| 358 | } else { | ||
| 359 | return ResultStatus::Error; | ||
| 360 | } | ||
| 361 | 347 | ||
| 362 | is_loaded = true; | 348 | is_loaded = true; |
| 363 | return ResultStatus::Success; | 349 | return ResultStatus::Success; |