summaryrefslogtreecommitdiffstats
path: root/src/core/file_sys/patch_manager.cpp
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2019-03-22 18:04:41 +0100
committerLioncash <mathew1800@gmail.com>2019-03-22 19:39:10 +0100
commit1cf90f45704373cd61d274d1e3c4dc6e5be87eaa (patch)
tree7654dab9069c34d32cd14f2ae3a025b7eaeff7b2 /src/core/file_sys/patch_manager.cpp
parentloader/nso: Fix definition of the NSO header struct (diff)
downloadyuzu-1cf90f45704373cd61d274d1e3c4dc6e5be87eaa.tar
yuzu-1cf90f45704373cd61d274d1e3c4dc6e5be87eaa.tar.gz
yuzu-1cf90f45704373cd61d274d1e3c4dc6e5be87eaa.tar.bz2
yuzu-1cf90f45704373cd61d274d1e3c4dc6e5be87eaa.tar.lz
yuzu-1cf90f45704373cd61d274d1e3c4dc6e5be87eaa.tar.xz
yuzu-1cf90f45704373cd61d274d1e3c4dc6e5be87eaa.tar.zst
yuzu-1cf90f45704373cd61d274d1e3c4dc6e5be87eaa.zip
Diffstat (limited to 'src/core/file_sys/patch_manager.cpp')
-rw-r--r--src/core/file_sys/patch_manager.cpp22
1 files changed, 8 insertions, 14 deletions
diff --git a/src/core/file_sys/patch_manager.cpp b/src/core/file_sys/patch_manager.cpp
index efc572c72..fd21d3ad1 100644
--- a/src/core/file_sys/patch_manager.cpp
+++ b/src/core/file_sys/patch_manager.cpp
@@ -20,6 +20,7 @@
#include "core/file_sys/vfs_vector.h"
#include "core/hle/service/filesystem/filesystem.h"
#include "core/loader/loader.h"
+#include "core/loader/nso.h"
#include "core/settings.h"
namespace FileSys {
@@ -32,14 +33,6 @@ constexpr std::array<const char*, 14> EXEFS_FILE_NAMES{
"subsdk3", "subsdk4", "subsdk5", "subsdk6", "subsdk7", "subsdk8", "subsdk9",
};
-struct NSOBuildHeader {
- u32_le magic;
- INSERT_PADDING_BYTES(0x3C);
- std::array<u8, 0x20> build_id;
- INSERT_PADDING_BYTES(0xA0);
-};
-static_assert(sizeof(NSOBuildHeader) == 0x100, "NSOBuildHeader has incorrect size.");
-
std::string FormatTitleVersion(u32 version, TitleVersionFormat format) {
std::array<u8, sizeof(u32)> bytes{};
bytes[0] = version % SINGLE_BYTE_MODULUS;
@@ -163,15 +156,16 @@ std::vector<VirtualFile> PatchManager::CollectPatches(const std::vector<VirtualD
}
std::vector<u8> PatchManager::PatchNSO(const std::vector<u8>& nso) const {
- if (nso.size() < sizeof(NSOBuildHeader)) {
+ if (nso.size() < sizeof(Loader::NSOHeader)) {
return nso;
}
- NSOBuildHeader header;
- std::memcpy(&header, nso.data(), sizeof(NSOBuildHeader));
+ Loader::NSOHeader header;
+ std::memcpy(&header, nso.data(), sizeof(header));
- if (header.magic != Common::MakeMagic('N', 'S', 'O', '0'))
+ if (header.magic != Common::MakeMagic('N', 'S', 'O', '0')) {
return nso;
+ }
const auto build_id_raw = Common::HexArrayToString(header.build_id);
const auto build_id = build_id_raw.substr(0, build_id_raw.find_last_not_of('0') + 1);
@@ -214,11 +208,11 @@ std::vector<u8> PatchManager::PatchNSO(const std::vector<u8>& nso) const {
}
}
- if (out.size() < sizeof(NSOBuildHeader)) {
+ if (out.size() < sizeof(Loader::NSOHeader)) {
return nso;
}
- std::memcpy(out.data(), &header, sizeof(NSOBuildHeader));
+ std::memcpy(out.data(), &header, sizeof(header));
return out;
}