| 703 | |
| 704 | |
| 705 | void cWSSCompact::cPAKFile::UpdateChunk2To3() |
| 706 | { |
| 707 | int Offset = 0; |
| 708 | AString NewDataContents; |
| 709 | int ChunksConverted = 0; |
| 710 | for (sChunkHeaders::iterator itr = m_ChunkHeaders.begin(); itr != m_ChunkHeaders.end(); ++itr) |
| 711 | { |
| 712 | sChunkHeader * Header = *itr; |
| 713 | |
| 714 | if( ChunksConverted % 32 == 0 ) |
| 715 | { |
| 716 | LOGINFO("Updating \"%s\" version 2 to version 3: " SIZE_T_FMT " %%", m_FileName.c_str(), (ChunksConverted * 100) / m_ChunkHeaders.size() ); |
| 717 | } |
| 718 | ChunksConverted++; |
| 719 | |
| 720 | AString Data; |
| 721 | int UncompressedSize = Header->m_UncompressedSize; |
| 722 | Data.assign(m_DataContents, Offset, Header->m_CompressedSize); |
| 723 | Offset += Header->m_CompressedSize; |
| 724 | |
| 725 | // Crude data integrity check: |
| 726 | const int ExpectedSize = (16*256*16)*2 + (16*256*16)/2; // For version 2 |
| 727 | if (UncompressedSize < ExpectedSize) |
| 728 | { |
| 729 | LOGWARNING("Chunk [%d, %d] has too short decompressed data (%d bytes out of %d needed), erasing", |
| 730 | Header->m_ChunkX, Header->m_ChunkZ, |
| 731 | UncompressedSize, ExpectedSize |
| 732 | ); |
| 733 | Offset += Header->m_CompressedSize; |
| 734 | continue; |
| 735 | } |
| 736 | |
| 737 | // Decompress the data: |
| 738 | AString UncompressedData; |
| 739 | { |
| 740 | int errorcode = UncompressString(Data.data(), Data.size(), UncompressedData, UncompressedSize); |
| 741 | if (errorcode != Z_OK) |
| 742 | { |
| 743 | LOGERROR("Error %d decompressing data for chunk [%d, %d]", |
| 744 | errorcode, |
| 745 | Header->m_ChunkX, Header->m_ChunkZ |
| 746 | ); |
| 747 | Offset += Header->m_CompressedSize; |
| 748 | continue; |
| 749 | } |
| 750 | } |
| 751 | |
| 752 | if (UncompressedSize != (int)UncompressedData.size()) |
| 753 | { |
| 754 | LOGWARNING("Uncompressed data size differs (exp %d bytes, got " SIZE_T_FMT ") for chunk [%d, %d]", |
| 755 | UncompressedSize, UncompressedData.size(), |
| 756 | Header->m_ChunkX, Header->m_ChunkZ |
| 757 | ); |
| 758 | Offset += Header->m_CompressedSize; |
| 759 | continue; |
| 760 | } |
| 761 | |
| 762 | char ConvertedData[ExpectedSize]; |
nothing calls this directly
no test coverage detected