diff --git a/lib/libimhex/source/providers/provider.cpp b/lib/libimhex/source/providers/provider.cpp index b9764e663..4cd87c430 100644 --- a/lib/libimhex/source/providers/provider.cpp +++ b/lib/libimhex/source/providers/provider.cpp @@ -133,7 +133,6 @@ namespace hex::prv { this->resizeRaw(newSize); std::vector buffer(0x1000, 0x00); - const std::vector zeroBuffer(0x1000, 0x00); auto position = oldSize; while (position > offset) { @@ -142,9 +141,18 @@ namespace hex::prv { position -= readSize; this->readRaw(position, buffer.data(), readSize); - this->writeRaw(position, zeroBuffer.data(), newSize - oldSize); this->writeRaw(position + size, buffer.data(), readSize); } + + constexpr static std::array ZeroBuffer = {}; + auto zeroPosition = offset; + auto remainingZeros = size; + while (remainingZeros > 0) { + const auto writeSize = std::min(remainingZeros, ZeroBuffer.size()); + this->writeRaw(zeroPosition, ZeroBuffer.data(), writeSize); + zeroPosition += writeSize; + remainingZeros -= writeSize; + } } void Provider::removeRaw(u64 offset, u64 size) {