diff --git a/src/openrct2/rct12/SawyerChunkReader.cpp b/src/openrct2/rct12/SawyerChunkReader.cpp index 7c3ef586fd..629f77069d 100644 --- a/src/openrct2/rct12/SawyerChunkReader.cpp +++ b/src/openrct2/rct12/SawyerChunkReader.cpp @@ -142,13 +142,8 @@ size_t SawyerChunkReader::DecodeChunk(void * dst, size_t dstCapacity, const void resultLength = DecodeChunkRLE(dst, dstCapacity, src, header.length); break; case CHUNK_ENCODING_RLECOMPRESSED: - { - auto immBufferLength = MAX_UNCOMPRESSED_CHUNK_SIZE; - auto immBuffer = std::make_unique(immBufferLength); - auto immLength = DecodeChunkRLE(immBuffer.get(), immBufferLength, src, header.length); - resultLength = DecodeChunkRepeat(dst, dstCapacity, immBuffer.get(), immLength); + resultLength = DecodeChunkRLERepeat(dst, dstCapacity, src, header.length); break; - } case CHUNK_ENCODING_ROTATE: resultLength = DecodeChunkRotate(dst, dstCapacity, src, header.length); break; @@ -158,6 +153,14 @@ size_t SawyerChunkReader::DecodeChunk(void * dst, size_t dstCapacity, const void return resultLength; } +size_t SawyerChunkReader::DecodeChunkRLERepeat(void * dst, size_t dstCapacity, const void * src, size_t srcLength) +{ + auto immBufferLength = MAX_UNCOMPRESSED_CHUNK_SIZE; + auto immBuffer = std::make_unique(immBufferLength); + auto immLength = DecodeChunkRLE(immBuffer.get(), immBufferLength, src, srcLength); + return DecodeChunkRepeat(dst, dstCapacity, immBuffer.get(), immLength); +} + size_t SawyerChunkReader::DecodeChunkRLE(void * dst, size_t dstCapacity, const void * src, size_t srcLength) { auto src8 = static_cast(src); diff --git a/src/openrct2/rct12/SawyerChunkReader.h b/src/openrct2/rct12/SawyerChunkReader.h index 3c01a02130..fda66ddf23 100644 --- a/src/openrct2/rct12/SawyerChunkReader.h +++ b/src/openrct2/rct12/SawyerChunkReader.h @@ -73,6 +73,7 @@ public: private: static size_t DecodeChunk(void * dst, size_t dstCapacity, const void * src, const sawyercoding_chunk_header &header); + static size_t DecodeChunkRLERepeat(void * dst, size_t dstCapacity, const void * src, size_t srcLength); static size_t DecodeChunkRLE(void * dst, size_t dstCapacity, const void * src, size_t srcLength); static size_t DecodeChunkRepeat(void * dst, size_t dstCapacity, const void * src, size_t srcLength); static size_t DecodeChunkRotate(void * dst, size_t dstCapacity, const void * src, size_t srcLength);