* Returns true if decompression was not needed or succeeded * @param stream * @return */
| 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 | { |
nothing calls this directly
no test coverage detected