From 2fa9afdaba8a3a43440cc8d3da94bd2c8dfbd992 Mon Sep 17 00:00:00 2001 From: Gabriel Studer <gabriel.studer@unibas.ch> Date: Wed, 17 Nov 2021 08:55:27 +0100 Subject: [PATCH] introduce magic number and version in OMF --- modules/io/src/mol/omf.cc | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/modules/io/src/mol/omf.cc b/modules/io/src/mol/omf.cc index 5d62e7fd1..8068041f4 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_); -- GitLab