|
From: Miquel G. <gbm...@gm...> - 2010-11-12 13:58:04
|
Instead of breaking out of parse process, skip sections that
cannot be handled.
---
Origin610Parser.cpp | 29 +++++++++++++++++++++++++++--
1 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/Origin610Parser.cpp b/Origin610Parser.cpp
index 2b83d58..eb24861 100644
--- a/Origin610Parser.cpp
+++ b/Origin610Parser.cpp
@@ -1013,8 +1013,33 @@ bool Origin610Parser::readGraphInfo()
//if (!QString(sec_name.c_str()).trimmed().isEmpty())
if (!sec_name.empty())
sectionNames.push_back(sec_name);
- else
- break;
+ else {
+ // section has no name, just skip it
+ LAYER += size + 0x01;
+ // skip header data
+ file.seekg(LAYER, ios_base::beg);
+ // get size of block_1 data
+ file >> size;
+ LAYER += 0x5 + size + 0x1;
+ // skip block_1
+ file.seekg(LAYER, ios_base::beg);
+ // get size of block_2 data
+ file >> size;
+ LAYER += 0x5 + size + (size > 0 ? 0x1 : 0);
+ // skip block_2
+ file.seekg(LAYER, ios_base::beg);
+ // get size of block_3 data
+ file >> size;
+ LAYER += 0x5 + size + (size > 0 ? 0x1 : 0);
+ // skip block_3
+ file.seekg(LAYER, ios_base::beg);
+ file >> size;
+ // if it is last section jump out
+ if (!size || size != sectionSize)
+ break;
+ // if not, continue with next section
+ continue;
+ }
unsigned int sectionNamePos = LAYER + 0x46;
LOG_PRINT(logfile, " SECTION NAME: %s (@ 0x%X)\n", sec_name.c_str(), (LAYER + 0x46))
--
1.7.3
|