summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO/DirectoryBlob.cpp
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2017-06-10 11:54:41 +0200
committerJosJuice <josjuice@gmail.com>2017-08-01 11:36:40 +0200
commitef39b4da4611169bab695d3943df794430cd7c45 (patch)
tree7901ecaf9482f194fc62382e2a6e6a1f8174beb0 /Source/Core/DiscIO/DirectoryBlob.cpp
parent31d8322c5a0732ae631ee6f8226c6b7c5527cff5 (diff)
DirectoryBlob: Improve SetApploader
The code gets simpler by using IOFile instead of ReadFileToString. Also, we now write -1 in all cases where loading fails.
Diffstat (limited to 'Source/Core/DiscIO/DirectoryBlob.cpp')
-rw-r--r--Source/Core/DiscIO/DirectoryBlob.cpp45
1 files changed, 21 insertions, 24 deletions
diff --git a/Source/Core/DiscIO/DirectoryBlob.cpp b/Source/Core/DiscIO/DirectoryBlob.cpp
index 7243d23b97..004cc46a82 100644
--- a/Source/Core/DiscIO/DirectoryBlob.cpp
+++ b/Source/Core/DiscIO/DirectoryBlob.cpp
@@ -167,7 +167,7 @@ DirectoryBlobReader::DirectoryBlobReader(const std::string& root_directory)
AddFileToContents(&m_virtual_disc, m_root_directory + "sys/bi2.bin", BI2_ADDRESS, BI2_SIZE);
- BuildFST(SetDOL(SetApploader(m_root_directory + "sys/apploader.img")));
+ BuildFST(SetDOL(SetApploader()));
if (m_is_wii)
{
@@ -330,35 +330,32 @@ void DirectoryBlobReader::SetTMDAndTicket()
reinterpret_cast<const u8*>(&m_tmd_header));
}
-u64 DirectoryBlobReader::SetApploader(const std::string& apploader)
+u64 DirectoryBlobReader::SetApploader()
{
- if (apploader.empty())
+ bool success = false;
+
+ const std::string path = m_root_directory + "sys/apploader.img";
+ File::IOFile file(path, "rb");
+ m_apploader.resize(file.GetSize());
+ if (m_apploader.size() < 0x20 || !file.ReadBytes(m_apploader.data(), m_apploader.size()))
{
- m_apploader.resize(0x20);
- // Make sure BS2 HLE doesn't try to run the apploader
- Write32(static_cast<u32>(-1), 0x10, &m_apploader);
+ ERROR_LOG(DISCIO, "%s couldn't be accessed or is too small", path.c_str());
}
else
{
- std::string data;
- if (!File::ReadFileToString(apploader, data))
- {
- PanicAlertT("Apploader unable to load from file");
- }
+ const size_t apploader_size = 0x20 + Common::swap32(*(u32*)&m_apploader[0x14]) +
+ Common::swap32(*(u32*)&m_apploader[0x18]);
+ if (apploader_size != m_apploader.size())
+ ERROR_LOG(DISCIO, "%s is the wrong size... Is it really an apploader?", path.c_str());
else
- {
- const size_t apploader_size = 0x20 + Common::swap32(*(u32*)&data.data()[0x14]) +
- Common::swap32(*(u32*)&data.data()[0x18]);
- if (apploader_size != data.size())
- {
- PanicAlertT("Apploader is the wrong size...is it really an apploader?");
- }
- else
- {
- m_apploader.resize(apploader_size);
- std::copy(data.begin(), data.end(), m_apploader.begin());
- }
- }
+ success = true;
+ }
+
+ if (!success)
+ {
+ m_apploader.resize(0x20);
+ // Make sure BS2 HLE doesn't try to run the apploader
+ Write32(static_cast<u32>(-1), 0x10, &m_apploader);
}
m_virtual_disc.emplace(APPLOADER_ADDRESS, m_apploader.size(), m_apploader.data());