mirror of
https://github.com/WerWolv/ImHex.git
synced 2026-04-01 21:17:44 -05:00
prv: Make data overlays work everywhere, not just in the hex editor view
This commit is contained in:
@@ -18,7 +18,7 @@ namespace hex::prv {
|
||||
this->deleteOverlay(overlay);
|
||||
}
|
||||
|
||||
void Provider::read(u64 offset, void *buffer, size_t size) {
|
||||
void Provider::read(u64 offset, void *buffer, size_t size, bool overlays) {
|
||||
this->readRaw(offset, buffer, size);
|
||||
}
|
||||
|
||||
@@ -26,6 +26,18 @@ namespace hex::prv {
|
||||
this->writeRaw(offset, buffer, size);
|
||||
}
|
||||
|
||||
void Provider::applyOverlays(u64 offset, void *buffer, size_t size) {
|
||||
for (auto &overlay : this->m_overlays) {
|
||||
auto overlayOffset = overlay->getAddress();
|
||||
auto overlaySize = overlay->getSize();
|
||||
|
||||
s128 overlapMin = std::max(offset, overlayOffset);
|
||||
s128 overlapMax = std::min(offset + size, overlayOffset + overlaySize);
|
||||
if (overlapMax > overlapMin)
|
||||
std::memcpy(static_cast<u8*>(buffer) + std::max<s128>(0, overlapMin - offset), overlay->getData().data() + std::max<s128>(0, overlapMin - overlayOffset), overlapMax - overlapMin);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
std::map<u64, u8>& Provider::getPatches() {
|
||||
return this->m_patches.back();
|
||||
|
||||
Reference in New Issue
Block a user