From 6bc5b89ae408ba3e1f5c2f39078714d636670ea6 Mon Sep 17 00:00:00 2001 From: Sour Date: Sun, 19 Jan 2020 19:15:56 -0500 Subject: [PATCH] Softpatching: Fixed IPS/BPS files not being applied properly --- Core/VirtualFile.cpp | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/Core/VirtualFile.cpp b/Core/VirtualFile.cpp index 28c3bea9..bc0d71f5 100644 --- a/Core/VirtualFile.cpp +++ b/Core/VirtualFile.cpp @@ -168,20 +168,24 @@ bool VirtualFile::ApplyPatch(VirtualFile &patch) { //Apply patch file bool result = false; - if(patch.IsValid() && patch._data.size() >= 5) { - vector patchedData; - std::stringstream ss; - patch.ReadFile(ss); + if(IsValid() && patch.IsValid()) { + patch.LoadFile(); + LoadFile(); + if(patch._data.size() >= 5) { + vector patchedData; + std::stringstream ss; + patch.ReadFile(ss); - if(memcmp(patch._data.data(), "PATCH", 5) == 0) { - result = IpsPatcher::PatchBuffer(ss, _data, patchedData); - } else if(memcmp(patch._data.data(), "UPS1", 4) == 0) { - result = UpsPatcher::PatchBuffer(ss, _data, patchedData); - } else if(memcmp(patch._data.data(), "BPS1", 4) == 0) { - result = BpsPatcher::PatchBuffer(ss, _data, patchedData); - } - if(result) { - _data = patchedData; + if(memcmp(patch._data.data(), "PATCH", 5) == 0) { + result = IpsPatcher::PatchBuffer(ss, _data, patchedData); + } else if(memcmp(patch._data.data(), "UPS1", 4) == 0) { + result = UpsPatcher::PatchBuffer(ss, _data, patchedData); + } else if(memcmp(patch._data.data(), "BPS1", 4) == 0) { + result = BpsPatcher::PatchBuffer(ss, _data, patchedData); + } + if(result) { + _data = patchedData; + } } } return result;