summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/loader/3dsx.cpp3
-rw-r--r--src/core/loader/elf.cpp3
-rw-r--r--src/core/loader/ncch.cpp11
3 files changed, 13 insertions, 4 deletions
diff --git a/src/core/loader/3dsx.cpp b/src/core/loader/3dsx.cpp
index 873ee8b25..e239808f3 100644
--- a/src/core/loader/3dsx.cpp
+++ b/src/core/loader/3dsx.cpp
@@ -100,6 +100,9 @@ static THREEDSX_Error Load3DSXFile(FileUtil::IOFile& file, u32 base_addr)
100 if (!file.IsOpen()) 100 if (!file.IsOpen())
101 return ERROR_FILE; 101 return ERROR_FILE;
102 102
103 // Reset read pointer in case this file has been read before.
104 file.Seek(0, SEEK_SET);
105
103 THREEDSX_Header hdr; 106 THREEDSX_Header hdr;
104 if (file.ReadBytes(&hdr, sizeof(hdr)) != sizeof(hdr)) 107 if (file.ReadBytes(&hdr, sizeof(hdr)) != sizeof(hdr))
105 return ERROR_READ; 108 return ERROR_READ;
diff --git a/src/core/loader/elf.cpp b/src/core/loader/elf.cpp
index d1a1ef595..712d564d1 100644
--- a/src/core/loader/elf.cpp
+++ b/src/core/loader/elf.cpp
@@ -337,6 +337,9 @@ ResultStatus AppLoader_ELF::Load() {
337 if (!file->IsOpen()) 337 if (!file->IsOpen())
338 return ResultStatus::Error; 338 return ResultStatus::Error;
339 339
340 // Reset read pointer in case this file has been read before.
341 file->Seek(0, SEEK_SET);
342
340 u32 size = static_cast<u32>(file->GetSize()); 343 u32 size = static_cast<u32>(file->GetSize());
341 std::unique_ptr<u8[]> buffer(new u8[size]); 344 std::unique_ptr<u8[]> buffer(new u8[size]);
342 file->ReadBytes(&buffer[0], size); 345 file->ReadBytes(&buffer[0], size);
diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp
index eca57d14b..edf53c2c0 100644
--- a/src/core/loader/ncch.cpp
+++ b/src/core/loader/ncch.cpp
@@ -125,7 +125,7 @@ ResultStatus AppLoader_NCCH::LoadSectionExeFS(const char* name, std::vector<u8>&
125 125
126 s64 section_offset = (exefs_header.section[i].offset + exefs_offset + 126 s64 section_offset = (exefs_header.section[i].offset + exefs_offset +
127 sizeof(ExeFs_Header)+ncch_offset); 127 sizeof(ExeFs_Header)+ncch_offset);
128 file->Seek(section_offset, 0); 128 file->Seek(section_offset, SEEK_SET);
129 129
130 // Section is compressed... 130 // Section is compressed...
131 if (i == 0 && is_compressed) { 131 if (i == 0 && is_compressed) {
@@ -165,13 +165,16 @@ ResultStatus AppLoader_NCCH::Load() {
165 if (!file->IsOpen()) 165 if (!file->IsOpen())
166 return ResultStatus::Error; 166 return ResultStatus::Error;
167 167
168 // Reset read pointer in case this file has been read before.
169 file->Seek(0, SEEK_SET);
170
168 file->ReadBytes(&ncch_header, sizeof(NCCH_Header)); 171 file->ReadBytes(&ncch_header, sizeof(NCCH_Header));
169 172
170 // Skip NCSD header and load first NCCH (NCSD is just a container of NCCH files)... 173 // Skip NCSD header and load first NCCH (NCSD is just a container of NCCH files)...
171 if (0 == memcmp(&ncch_header.magic, "NCSD", 4)) { 174 if (0 == memcmp(&ncch_header.magic, "NCSD", 4)) {
172 LOG_WARNING(Loader, "Only loading the first (bootable) NCCH within the NCSD file!"); 175 LOG_WARNING(Loader, "Only loading the first (bootable) NCCH within the NCSD file!");
173 ncch_offset = 0x4000; 176 ncch_offset = 0x4000;
174 file->Seek(ncch_offset, 0); 177 file->Seek(ncch_offset, SEEK_SET);
175 file->ReadBytes(&ncch_header, sizeof(NCCH_Header)); 178 file->ReadBytes(&ncch_header, sizeof(NCCH_Header));
176 } 179 }
177 180
@@ -198,7 +201,7 @@ ResultStatus AppLoader_NCCH::Load() {
198 LOG_DEBUG(Loader, "ExeFS offset: 0x%08X", exefs_offset); 201 LOG_DEBUG(Loader, "ExeFS offset: 0x%08X", exefs_offset);
199 LOG_DEBUG(Loader, "ExeFS size: 0x%08X", exefs_size); 202 LOG_DEBUG(Loader, "ExeFS size: 0x%08X", exefs_size);
200 203
201 file->Seek(exefs_offset + ncch_offset, 0); 204 file->Seek(exefs_offset + ncch_offset, SEEK_SET);
202 file->ReadBytes(&exefs_header, sizeof(ExeFs_Header)); 205 file->ReadBytes(&exefs_header, sizeof(ExeFs_Header));
203 206
204 LoadExec(); // Load the executable into memory for booting 207 LoadExec(); // Load the executable into memory for booting
@@ -238,7 +241,7 @@ ResultStatus AppLoader_NCCH::ReadRomFS(std::vector<u8>& buffer) const {
238 241
239 buffer.resize(romfs_size); 242 buffer.resize(romfs_size);
240 243
241 file->Seek(romfs_offset, 0); 244 file->Seek(romfs_offset, SEEK_SET);
242 file->ReadBytes(&buffer[0], romfs_size); 245 file->ReadBytes(&buffer[0], romfs_size);
243 246
244 return ResultStatus::Success; 247 return ResultStatus::Success;