diff options
author | Lioncash <mathew1800@gmail.com> | 2019-03-22 18:04:41 +0100 |
---|---|---|
committer | Lioncash <mathew1800@gmail.com> | 2019-03-22 19:39:10 +0100 |
commit | 1cf90f45704373cd61d274d1e3c4dc6e5be87eaa (patch) | |
tree | 7654dab9069c34d32cd14f2ae3a025b7eaeff7b2 /src/core/file_sys | |
parent | loader/nso: Fix definition of the NSO header struct (diff) | |
download | yuzu-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')
-rw-r--r-- | src/core/file_sys/patch_manager.cpp | 22 |
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; } |