diff options
Diffstat (limited to 'src/mapblock.cpp')
-rw-r--r-- | src/mapblock.cpp | 140 |
1 files changed, 59 insertions, 81 deletions
diff --git a/src/mapblock.cpp b/src/mapblock.cpp index 43057f3a5..f8747f52b 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -96,7 +96,7 @@ MapBlock::~MapBlock() { #ifndef SERVER { - //JMutexAutoLock lock(mesh_mutex); + //MutexAutoLock lock(mesh_mutex); if(mesh) { @@ -501,7 +501,7 @@ static void getBlockNodeIdMapping(NameIdMapping *nimap, MapNode *nodes, } for(std::set<content_t>::const_iterator i = unknown_contents.begin(); - i != unknown_contents.end(); i++){ + i != unknown_contents.end(); ++i){ errorstream<<"getBlockNodeIdMapping(): IGNORING ERROR: " <<"Name for node id "<<(*i)<<" not known"<<std::endl; } @@ -540,14 +540,14 @@ static void correctBlockNodeIds(const NameIdMapping *nimap, MapNode *nodes, } for(std::set<content_t>::const_iterator i = unnamed_contents.begin(); - i != unnamed_contents.end(); i++){ + i != unnamed_contents.end(); ++i){ errorstream<<"correctBlockNodeIds(): IGNORING ERROR: " <<"Block contains id "<<(*i) <<" with no name mapping"<<std::endl; } for(std::set<std::string>::const_iterator i = unallocatable_contents.begin(); - i != unallocatable_contents.end(); i++){ + i != unallocatable_contents.end(); ++i){ errorstream<<"correctBlockNodeIds(): IGNORING ERROR: " <<"Could not allocate global id for node name \"" <<(*i)<<"\""<<std::endl; @@ -564,7 +564,7 @@ void MapBlock::serialize(std::ostream &os, u8 version, bool disk) throw SerializationError("ERROR: Not writing dummy block."); } - FATAL_ERROR_IF(version < SER_FMT_CLIENT_VER_LOWEST, "Serialize version error"); + FATAL_ERROR_IF(version < SER_FMT_VER_LOWEST_WRITE, "Serialisation version error"); // First byte u8 flags = 0; @@ -696,20 +696,18 @@ void MapBlock::deSerialize(std::istream &is, u8 version, bool disk) TRACESTREAM(<<"MapBlock::deSerialize "<<PP(getPos()) <<": Node metadata"<<std::endl); // Ignore errors - try{ + try { std::ostringstream oss(std::ios_base::binary); decompressZlib(is, oss); std::istringstream iss(oss.str(), std::ios_base::binary); - if(version >= 23) - m_node_metadata.deSerialize(iss, m_gamedef); + if (version >= 23) + m_node_metadata.deSerialize(iss, m_gamedef->idef()); else content_nodemeta_deserialize_legacy(iss, - &m_node_metadata, &m_node_timers, - m_gamedef); - } - catch(SerializationError &e) - { - errorstream<<"WARNING: MapBlock::deSerialize(): Ignoring an error" + &m_node_metadata, &m_node_timers, + m_gamedef->idef()); + } catch(SerializationError &e) { + warningstream<<"MapBlock::deSerialize(): Ignoring an error" <<" while deserializing node metadata at (" <<PP(getPos())<<": "<<e.what()<<std::endl; } @@ -772,7 +770,7 @@ void MapBlock::deSerializeNetworkSpecific(std::istream &is) } catch(SerializationError &e) { - errorstream<<"WARNING: MapBlock::deSerializeNetworkSpecific(): Ignoring an error" + warningstream<<"MapBlock::deSerializeNetworkSpecific(): Ignoring an error" <<": "<<e.what()<<std::endl; } } @@ -794,23 +792,20 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk) SharedBuffer<u8> databuf_nodelist(nodecount * ser_length); // These have no compression - if(version <= 3 || version == 5 || version == 6) - { + if (version <= 3 || version == 5 || version == 6) { char tmp; is.read(&tmp, 1); - if(is.gcount() != 1) - throw SerializationError - ("MapBlock::deSerialize: no enough input data"); + if (is.gcount() != 1) + throw SerializationError(std::string(FUNCTION_NAME) + + ": not enough input data"); is_underground = tmp; - is.read((char*)*databuf_nodelist, nodecount * ser_length); - if((u32)is.gcount() != nodecount * ser_length) - throw SerializationError - ("MapBlock::deSerialize: no enough input data"); - } - else if(version <= 10) - { + is.read((char *)*databuf_nodelist, nodecount * ser_length); + if ((u32)is.gcount() != nodecount * ser_length) + throw SerializationError(std::string(FUNCTION_NAME) + + ": not enough input data"); + } else if (version <= 10) { u8 t8; - is.read((char*)&t8, 1); + is.read((char *)&t8, 1); is_underground = t8; { @@ -818,11 +813,10 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk) std::ostringstream os(std::ios_base::binary); decompress(is, os, version); std::string s = os.str(); - if(s.size() != nodecount) - throw SerializationError - ("MapBlock::deSerialize: invalid format"); - for(u32 i=0; i<s.size(); i++) - { + if (s.size() != nodecount) + throw SerializationError(std::string(FUNCTION_NAME) + + ": not enough input data"); + for (u32 i = 0; i < s.size(); i++) { databuf_nodelist[i*ser_length] = s[i]; } } @@ -831,33 +825,27 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk) std::ostringstream os(std::ios_base::binary); decompress(is, os, version); std::string s = os.str(); - if(s.size() != nodecount) - throw SerializationError - ("MapBlock::deSerialize: invalid format"); - for(u32 i=0; i<s.size(); i++) - { + if (s.size() != nodecount) + throw SerializationError(std::string(FUNCTION_NAME) + + ": not enough input data"); + for (u32 i = 0; i < s.size(); i++) { databuf_nodelist[i*ser_length + 1] = s[i]; } } - if(version >= 10) - { + if (version >= 10) { // Uncompress and set param2 data std::ostringstream os(std::ios_base::binary); decompress(is, os, version); std::string s = os.str(); - if(s.size() != nodecount) - throw SerializationError - ("MapBlock::deSerialize: invalid format"); - for(u32 i=0; i<s.size(); i++) - { + if (s.size() != nodecount) + throw SerializationError(std::string(FUNCTION_NAME) + + ": not enough input data"); + for (u32 i = 0; i < s.size(); i++) { databuf_nodelist[i*ser_length + 2] = s[i]; } } - } - // All other versions (newest) - else - { + } else { // All other versions (10 to 21) u8 flags; is.read((char*)&flags, 1); is_underground = (flags & 0x01) ? true : false; @@ -870,14 +858,12 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk) std::ostringstream os(std::ios_base::binary); decompress(is, os, version); std::string s = os.str(); - if(s.size() != nodecount*3) - throw SerializationError - ("MapBlock::deSerialize: decompress resulted in size" - " other than nodecount*3"); + if (s.size() != nodecount * 3) + throw SerializationError(std::string(FUNCTION_NAME) + + ": decompress resulted in size other than nodecount*3"); // deserialize nodes from buffer - for(u32 i=0; i<nodecount; i++) - { + for (u32 i = 0; i < nodecount; i++) { databuf_nodelist[i*ser_length] = s[i]; databuf_nodelist[i*ser_length + 1] = s[i+nodecount]; databuf_nodelist[i*ser_length + 2] = s[i+nodecount*2]; @@ -886,53 +872,45 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk) /* NodeMetadata */ - if(version >= 14) - { + if (version >= 14) { // Ignore errors - try{ - if(version <= 15) - { + try { + if (version <= 15) { std::string data = deSerializeString(is); std::istringstream iss(data, std::ios_base::binary); content_nodemeta_deserialize_legacy(iss, - &m_node_metadata, &m_node_timers, - m_gamedef); - } - else - { + &m_node_metadata, &m_node_timers, + m_gamedef->idef()); + } else { //std::string data = deSerializeLongString(is); std::ostringstream oss(std::ios_base::binary); decompressZlib(is, oss); std::istringstream iss(oss.str(), std::ios_base::binary); content_nodemeta_deserialize_legacy(iss, - &m_node_metadata, &m_node_timers, - m_gamedef); + &m_node_metadata, &m_node_timers, + m_gamedef->idef()); } - } - catch(SerializationError &e) - { - errorstream<<"WARNING: MapBlock::deSerialize(): Ignoring an error" + } catch(SerializationError &e) { + warningstream<<"MapBlock::deSerialize(): Ignoring an error" <<" while deserializing node metadata"<<std::endl; } } } // Deserialize node data - for(u32 i=0; i<nodecount; i++) - { - data[i].deSerialize(&databuf_nodelist[i*ser_length], version); + for (u32 i = 0; i < nodecount; i++) { + data[i].deSerialize(&databuf_nodelist[i * ser_length], version); } - if(disk) - { + if (disk) { /* Versions up from 9 have block objects. (DEPRECATED) */ - if(version >= 9){ + if (version >= 9) { u16 count = readU16(is); // Not supported and length not known if count is not 0 if(count != 0){ - errorstream<<"WARNING: MapBlock::deSerialize_pre22(): " + warningstream<<"MapBlock::deSerialize_pre22(): " <<"Ignoring stuff coming at and after MBOs"<<std::endl; return; } @@ -941,11 +919,11 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk) /* Versions up from 15 have static objects. */ - if(version >= 15) + if (version >= 15) m_static_objects.deSerialize(is); // Timestamp - if(version >= 17){ + if (version >= 17) { setTimestamp(readU32(is)); m_disk_timestamp = m_timestamp; } else { @@ -955,7 +933,7 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk) // Dynamically re-set ids based on node names NameIdMapping nimap; // If supported, read node definition id mapping - if(version >= 21){ + if (version >= 21) { nimap.deSerialize(is); // Else set the legacy mapping } else { |