diff --git a/modules/io/src/mol/omf.cc b/modules/io/src/mol/omf.cc index 5d62e7fd1abd2e90da441f8baa54c2aaa0846e1b..8068041f4a700378cfc7254efd65c8f87412b415 100644 --- a/modules/io/src/mol/omf.cc +++ b/modules/io/src/mol/omf.cc @@ -1118,6 +1118,13 @@ ost::mol::EntityHandle OMF::GetBU(int bu_idx) const{ } void OMF::ToStream(std::ostream& stream) const { + + uint32_t magic_number = 42; + stream.write(reinterpret_cast<char*>(&magic_number), sizeof(uint32_t)); + + uint32_t version = 1; + stream.write(reinterpret_cast<char*>(&version), sizeof(uint32_t)); + Dump(stream, residue_definitions_); Dump(stream, biounit_definitions_); Dump(stream, chain_data_); @@ -1127,6 +1134,21 @@ void OMF::ToStream(std::ostream& stream) const { } void OMF::FromStream(std::istream& stream) { + + uint32_t magic_number; + stream.read(reinterpret_cast<char*>(&magic_number), sizeof(uint32_t)); + if(magic_number != 42) { + throw ost::Error("Cannot read corrupted OMF stream"); + } + + uint32_t version; + stream.read(reinterpret_cast<char*>(&version), sizeof(uint32_t)); + if(version != 1) { + std::stringstream ss; + ss << "OST version only supports OMF version 1. Got "<<version; + throw ost::Error(ss.str()); + } + Load(stream, residue_definitions_); Load(stream, biounit_definitions_); Load(stream, chain_data_);