MCPcopy Create free account
hub / github.com/cuberite/cuberite / UpdateChunk2To3

Method UpdateChunk2To3

src/WorldStorage/WSSCompact.cpp:705–836  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

703
704
705void 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];

Callers

nothing calls this directly

Calls 8

LOGINFOFunction · 0.85
UncompressStringFunction · 0.85
LOGERRORFunction · 0.85
CompressStringFunction · 0.85
beginMethod · 0.80
endMethod · 0.80
c_strMethod · 0.80
sizeMethod · 0.80

Tested by

no test coverage detected