| 559 | |
| 560 | |
| 561 | void cWSSCompact::cPAKFile::UpdateChunk1To2() |
| 562 | { |
| 563 | int Offset = 0; |
| 564 | AString NewDataContents; |
| 565 | int ChunksConverted = 0; |
| 566 | for (sChunkHeaders::iterator itr = m_ChunkHeaders.begin(); itr != m_ChunkHeaders.end(); ++itr) |
| 567 | { |
| 568 | sChunkHeader * Header = *itr; |
| 569 | |
| 570 | if( ChunksConverted % 32 == 0 ) |
| 571 | { |
| 572 | LOGINFO("Updating \"%s\" version 1 to version 2: " SIZE_T_FMT " %%", m_FileName.c_str(), (ChunksConverted * 100) / m_ChunkHeaders.size() ); |
| 573 | } |
| 574 | ChunksConverted++; |
| 575 | |
| 576 | AString Data; |
| 577 | int UncompressedSize = Header->m_UncompressedSize; |
| 578 | Data.assign(m_DataContents, Offset, Header->m_CompressedSize); |
| 579 | Offset += Header->m_CompressedSize; |
| 580 | |
| 581 | // Crude data integrity check: |
| 582 | int ExpectedSize = (16*128*16)*2 + (16*128*16)/2; // For version 1 |
| 583 | if (UncompressedSize < ExpectedSize) |
| 584 | { |
| 585 | LOGWARNING("Chunk [%d, %d] has too short decompressed data (%d bytes out of %d needed), erasing", |
| 586 | Header->m_ChunkX, Header->m_ChunkZ, |
| 587 | UncompressedSize, ExpectedSize |
| 588 | ); |
| 589 | Offset += Header->m_CompressedSize; |
| 590 | continue; |
| 591 | } |
| 592 | |
| 593 | // Decompress the data: |
| 594 | AString UncompressedData; |
| 595 | { |
| 596 | int errorcode = UncompressString(Data.data(), Data.size(), UncompressedData, UncompressedSize); |
| 597 | if (errorcode != Z_OK) |
| 598 | { |
| 599 | LOGERROR("Error %d decompressing data for chunk [%d, %d]", |
| 600 | errorcode, |
| 601 | Header->m_ChunkX, Header->m_ChunkZ |
| 602 | ); |
| 603 | Offset += Header->m_CompressedSize; |
| 604 | continue; |
| 605 | } |
| 606 | } |
| 607 | |
| 608 | if (UncompressedSize != (int)UncompressedData.size()) |
| 609 | { |
| 610 | LOGWARNING("Uncompressed data size differs (exp %d bytes, got " SIZE_T_FMT ") for chunk [%d, %d]", |
| 611 | UncompressedSize, UncompressedData.size(), |
| 612 | Header->m_ChunkX, Header->m_ChunkZ |
| 613 | ); |
| 614 | Offset += Header->m_CompressedSize; |
| 615 | continue; |
| 616 | } |
| 617 | |
| 618 |
nothing calls this directly
no test coverage detected