From ed4c18b7734367a5e0ea312f650d24929e7c2b7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20T=C5=AFma?= Date: Wed, 30 Apr 2025 23:05:04 +0200 Subject: [PATCH] Improved error reporting --- src/map/ENC/iso8211.cpp | 4 ---- src/map/ENC/iso8211.h | 1 + src/map/ENC/mapdata.cpp | 10 ++++++++-- src/map/encatlas.cpp | 10 +++++----- src/map/encmap.cpp | 10 +++++----- 5 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/map/ENC/iso8211.cpp b/src/map/ENC/iso8211.cpp index 1d1662f6..bdd198c6 100644 --- a/src/map/ENC/iso8211.cpp +++ b/src/map/ENC/iso8211.cpp @@ -259,13 +259,9 @@ bool ISO8211::readUDA(quint64 pos, const FieldDefinition &def, bool ISO8211::readRecord(Record &record) { - if (_file.atEnd()) - return false; - QVector fields; qint64 pos = _file.pos(); - if (readDR(fields) < 0) { _errorString = "Error reading DR"; return false; diff --git a/src/map/ENC/iso8211.h b/src/map/ENC/iso8211.h index 7588836a..ab2cb450 100644 --- a/src/map/ENC/iso8211.h +++ b/src/map/ENC/iso8211.h @@ -35,6 +35,7 @@ public: ISO8211(const QString &path) : _file(path) {} bool readDDR(); bool readRecord(Record &record); + bool atEnd() const {return _file.atEnd();} const QString &errorString() const {return _errorString;} static constexpr quint32 NAME(const char str[4]) diff --git a/src/map/ENC/mapdata.cpp b/src/map/ENC/mapdata.cpp index 98292d35..2e3a1179 100644 --- a/src/map/ENC/mapdata.cpp +++ b/src/map/ENC/mapdata.cpp @@ -829,9 +829,15 @@ MapData::MapData(const QString &path) if (!ddf.readDDR()) return; - while (ddf.readRecord(record)) + while (!ddf.atEnd()) { + if (!ddf.readRecord(record)) { + qWarning("%s: %s", qUtf8Printable(path), + qUtf8Printable(ddf.errorString())); + break; + } if (!processRecord(record, fe, vi, vc, ve, comf, somf, huni)) - qWarning("Invalid S-57 record"); + qWarning("%s: Invalid S-57 record", qUtf8Printable(path)); + } for (int i = 0; i < fe.size(); i++) { const ISO8211::Record &r = fe.at(i); diff --git a/src/map/encatlas.cpp b/src/map/encatlas.cpp index 6a9b78c2..23fb9b14 100644 --- a/src/map/encatlas.cpp +++ b/src/map/encatlas.cpp @@ -127,14 +127,14 @@ ENCAtlas::ENCAtlas(const QString &fileName, QObject *parent) _errorString = ddf.errorString(); return; } - while (ddf.readRecord(record)) { + while (!ddf.atEnd()) { + if (!ddf.readRecord(record)) { + _errorString = ddf.errorString(); + return; + } if (processRecord(record, file, bounds)) addMap(dir, file, bounds); } - if (!ddf.errorString().isNull()) { - _errorString = ddf.errorString(); - return; - } if (_data.isEmpty()) { _errorString = "No usable ENC map found"; diff --git a/src/map/encmap.cpp b/src/map/encmap.cpp index 3d3a47d8..38ff9714 100644 --- a/src/map/encmap.cpp +++ b/src/map/encmap.cpp @@ -143,16 +143,16 @@ ENCMap::ENCMap(const QString &fileName, QObject *parent) _errorString = ddf.errorString(); return; } - while (ddf.readRecord(record)) { + while (!ddf.atEnd()) { + if (!ddf.readRecord(record)) { + _errorString = ddf.errorString(); + return; + } if (!processRecord(record, gv, comf, dsnm)) { _errorString = "Invalid S-57 record"; return; } } - if (!ddf.errorString().isNull()) { - _errorString = ddf.errorString(); - return; - } _name = dsnm;