MCPcopy Create free account
hub / github.com/OpenRCT2/OpenRCT2 / DecompressFile

Method DecompressFile

src/openrct2/ReplayManager.cpp:571–611  ·  view source on GitHub ↗

* Returns true if decompression was not needed or succeeded * @param stream * @return */

Source from the content-addressed store, hash-verified

569 * @return
570 */
571 MemoryStream DecompressFile(FileStream& fileStream)
572 {
573 ReplayRecordFile recFile;
574 fileStream.SetPosition(0);
575 DataSerialiser fileSerializer(false, fileStream);
576 fileSerializer << recFile.magic;
577 fileSerializer << recFile.version;
578
579 if (recFile.version >= 2)
580 {
581 fileSerializer << recFile.uncompressedSize;
582 fileSerializer << recFile.data;
583
584 MemoryStream decompressed;
585 bool decompressStatus = true;
586 recFile.data.SetPosition(0);
587 if (recFile.version <= 10)
588 {
589 decompressStatus = Compression::zlibDecompress(
590 recFile.data, recFile.data.GetLength(), decompressed, recFile.uncompressedSize,
591 Compression::ZlibHeaderType::zlib);
592 }
593 else
594 {
595 decompressStatus = Compression::zstdDecompress(
596 recFile.data, recFile.data.GetLength(), decompressed, recFile.uncompressedSize);
597 }
598 if (!decompressStatus)
599 throw IOException("Decompression Error");
600
601 recFile.data = std::move(decompressed);
602 }
603 else
604 {
605 // Read whole file into memory
606 fileStream.SetPosition(0);
607 recFile.data.CopyFromStream(fileStream, fileStream.GetLength());
608 }
609
610 return recFile.data;
611 }
612
613 void ReadReplayData(const std::string& file, ReplayRecordData& data)
614 {

Callers

nothing calls this directly

Calls 6

zlibDecompressFunction · 0.85
zstdDecompressFunction · 0.85
IOExceptionClass · 0.85
SetPositionMethod · 0.45
GetLengthMethod · 0.45
CopyFromStreamMethod · 0.45

Tested by

no test coverage detected