summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/loader/3dsx.cpp7
-rw-r--r--src/core/loader/3dsx.h2
-rw-r--r--src/core/loader/elf.cpp4
-rw-r--r--src/core/loader/elf.h2
-rw-r--r--src/core/loader/ncch.cpp5
-rw-r--r--src/core/loader/ncch.h2
6 files changed, 15 insertions, 7 deletions
diff --git a/src/core/loader/3dsx.cpp b/src/core/loader/3dsx.cpp
index 06827668f..15032e0ae 100644
--- a/src/core/loader/3dsx.cpp
+++ b/src/core/loader/3dsx.cpp
@@ -215,13 +215,20 @@ AppLoader_THREEDSX::~AppLoader_THREEDSX() {
215 215
216ResultStatus AppLoader_THREEDSX::Load() { 216ResultStatus AppLoader_THREEDSX::Load() {
217 LOG_INFO(Loader, "Loading 3DSX file %s...", filename.c_str()); 217 LOG_INFO(Loader, "Loading 3DSX file %s...", filename.c_str());
218
219 if (is_loaded)
220 return ResultStatus::ErrorAlreadyLoaded;
221
218 FileUtil::IOFile file(filename, "rb"); 222 FileUtil::IOFile file(filename, "rb");
223
219 if (file.IsOpen()) { 224 if (file.IsOpen()) {
220 THREEDSXReader::Load3DSXFile(filename, 0x00100000); 225 THREEDSXReader::Load3DSXFile(filename, 0x00100000);
221 Kernel::LoadExec(0x00100000); 226 Kernel::LoadExec(0x00100000);
222 } else { 227 } else {
223 return ResultStatus::Error; 228 return ResultStatus::Error;
224 } 229 }
230
231 is_loaded = true;
225 return ResultStatus::Success; 232 return ResultStatus::Success;
226} 233}
227 234
diff --git a/src/core/loader/3dsx.h b/src/core/loader/3dsx.h
index da8836662..f28224628 100644
--- a/src/core/loader/3dsx.h
+++ b/src/core/loader/3dsx.h
@@ -26,7 +26,7 @@ public:
26 26
27private: 27private:
28 std::string filename; 28 std::string filename;
29 bool is_loaded; 29 bool is_loaded = false;
30}; 30};
31 31
32} // namespace Loader 32} // namespace Loader
diff --git a/src/core/loader/elf.cpp b/src/core/loader/elf.cpp
index 89664229a..ee711d8b2 100644
--- a/src/core/loader/elf.cpp
+++ b/src/core/loader/elf.cpp
@@ -331,7 +331,7 @@ bool ElfReader::LoadSymbols() {
331namespace Loader { 331namespace Loader {
332 332
333/// AppLoader_ELF constructor 333/// AppLoader_ELF constructor
334AppLoader_ELF::AppLoader_ELF(const std::string& filename) : is_loaded(false) { 334AppLoader_ELF::AppLoader_ELF(const std::string& filename) {
335 this->filename = filename; 335 this->filename = filename;
336} 336}
337 337
@@ -358,6 +358,8 @@ ResultStatus AppLoader_ELF::Load() {
358 } else { 358 } else {
359 return ResultStatus::Error; 359 return ResultStatus::Error;
360 } 360 }
361
362 is_loaded = true;
361 return ResultStatus::Success; 363 return ResultStatus::Success;
362} 364}
363 365
diff --git a/src/core/loader/elf.h b/src/core/loader/elf.h
index c221cce6d..856722f1e 100644
--- a/src/core/loader/elf.h
+++ b/src/core/loader/elf.h
@@ -26,7 +26,7 @@ public:
26 26
27private: 27private:
28 std::string filename; 28 std::string filename;
29 bool is_loaded; 29 bool is_loaded = false;
30}; 30};
31 31
32} // namespace Loader 32} // namespace Loader
diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp
index f1d01252e..0793cc7cd 100644
--- a/src/core/loader/ncch.cpp
+++ b/src/core/loader/ncch.cpp
@@ -102,7 +102,6 @@ static bool LZSS_Decompress(u8* compressed, u32 compressed_size, u8* decompresse
102/// AppLoader_NCCH constructor 102/// AppLoader_NCCH constructor
103AppLoader_NCCH::AppLoader_NCCH(const std::string& filename) { 103AppLoader_NCCH::AppLoader_NCCH(const std::string& filename) {
104 this->filename = filename; 104 this->filename = filename;
105 is_loaded = false;
106 is_compressed = false; 105 is_compressed = false;
107 entry_point = 0; 106 entry_point = 0;
108 ncch_offset = 0; 107 ncch_offset = 0;
@@ -221,10 +220,10 @@ ResultStatus AppLoader_NCCH::Load() {
221 file.Seek(exefs_offset + ncch_offset, 0); 220 file.Seek(exefs_offset + ncch_offset, 0);
222 file.ReadBytes(&exefs_header, sizeof(ExeFs_Header)); 221 file.ReadBytes(&exefs_header, sizeof(ExeFs_Header));
223 222
224 is_loaded = true; // Set state to loaded
225
226 LoadExec(); // Load the executable into memory for booting 223 LoadExec(); // Load the executable into memory for booting
227 224
225 is_loaded = true; // Set state to loaded
226
228 return ResultStatus::Success; 227 return ResultStatus::Success;
229 } else { 228 } else {
230 LOG_ERROR(Loader, "Unable to read file %s!", filename.c_str()); 229 LOG_ERROR(Loader, "Unable to read file %s!", filename.c_str());
diff --git a/src/core/loader/ncch.h b/src/core/loader/ncch.h
index fd9258970..184a20d98 100644
--- a/src/core/loader/ncch.h
+++ b/src/core/loader/ncch.h
@@ -215,7 +215,7 @@ private:
215 215
216 std::string filename; 216 std::string filename;
217 217
218 bool is_loaded; 218 bool is_loaded = false;
219 bool is_compressed; 219 bool is_compressed;
220 220
221 u32 entry_point; 221 u32 entry_point;