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

Method UpdateChunk1To2

src/WorldStorage/WSSCompact.cpp:561–699  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

559
560
561void 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

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