From 24401fdd20b28be86f5d49f1c467af0f01694980 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Thu, 5 Nov 2026 04:29:46 +0000 Subject: [PATCH] Decompile fn_18142 (CMemMapPakFile::Read) Batch #11715 by cremane: 0 byte-identical, 1 confirmed by peer review. - fn_18142 CMemMapPakFile::Read: logic confirmed by peer review Peer-reviewed-by: Yommy, KWDev Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes). --- Source/Archive/MemMapPakFile.cpp | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/Source/Archive/MemMapPakFile.cpp b/Source/Archive/MemMapPakFile.cpp index c760387b..40fecc49 100644 --- a/Source/Archive/MemMapPakFile.cpp +++ b/Source/Archive/MemMapPakFile.cpp @@ -76,27 +76,30 @@ std::uint8_t* CMemMapPakFile::Read(std::uint64_t offset, std::uint32_t length) { this->m_view = nullptr; } - while (this->m_windowSize >= length + (static_cast(offset) & ~static_cast(this->m_offsetMask))) { - this->m_viewOffset = offset & this->m_offsetMask; - this->m_viewSize = this->m_windowSize; - SIZE_T bytes = this->m_windowSize; - - if (this->m_viewOffset + this->m_windowSize > this->m_size) { - bytes = 0; - this->m_viewSize = static_cast(this->m_size - this->m_viewOffset); + while (this->m_windowSize) { + if (this->m_windowSize < length + (static_cast(offset) & ~static_cast(this->m_offsetMask))) { + break; + } + + this->m_viewOffset = offset & this->m_offsetMask; + this->m_viewSize = this->m_windowSize; + + if (this->m_viewOffset + this->m_windowSize > this->m_size) { + this->m_view = static_cast( + MapViewOfFile(this->m_mapping, FILE_MAP_READ, static_cast(this->m_viewOffset >> 32), static_cast(this->m_viewOffset), 0) + ); + this->m_viewSize = static_cast(this->m_size - this->m_viewOffset); + } else { + this->m_view = static_cast(MapViewOfFile( + this->m_mapping, FILE_MAP_READ, static_cast(this->m_viewOffset >> 32), static_cast(this->m_viewOffset), this->m_windowSize + )); } - this->m_view = static_cast( - MapViewOfFile(this->m_mapping, FILE_MAP_READ, static_cast(this->m_viewOffset >> 32), static_cast(this->m_viewOffset), bytes) - ); if (this->m_view) { return this->m_view + static_cast(offset - this->m_viewOffset); } this->m_windowSize >>= 1; - if (!this->m_windowSize) { - break; - } } CloseHandle(this->m_mapping);