mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-30 15:39:02 -05:00 
			
		
		
		
	Merge pull request #2280 from lioncash/nso
loader/nso: Minor refactoring
This commit is contained in:
		| @@ -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,14 +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() < 0x100) | ||||
|     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); | ||||
| @@ -213,9 +208,11 @@ std::vector<u8> PatchManager::PatchNSO(const std::vector<u8>& nso) const { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if (out.size() < 0x100) | ||||
|     if (out.size() < sizeof(Loader::NSOHeader)) { | ||||
|         return nso; | ||||
|     std::memcpy(out.data(), &header, sizeof(NSOBuildHeader)); | ||||
|     } | ||||
|  | ||||
|     std::memcpy(out.data(), &header, sizeof(header)); | ||||
|     return out; | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 bunnei
					bunnei