diff --git a/src/assert.h b/src/assert.h new file mode 100644 index 00000000..a2562f86 --- /dev/null +++ b/src/assert.h @@ -0,0 +1,11 @@ +#ifndef ASSERT_H +#define ASSERT_H + +template struct CompileTimeAssert; +template<> struct CompileTimeAssert {}; + +#define STATIC_ASSERT(e) \ + (CompileTimeAssert <(e) != 0>()) + +#endif // ASSERT_H + diff --git a/src/fitparser.cpp b/src/fitparser.cpp index 76ba09ed..ff390ba1 100644 --- a/src/fitparser.cpp +++ b/src/fitparser.cpp @@ -1,5 +1,6 @@ #include #include +#include "assert.h" #include "fitparser.h" @@ -122,6 +123,7 @@ bool FITParser::parseDefinitionMessage(quint8 header) // definition records def->fields = new Field[def->numFields]; for (i = 0; i < def->numFields; i++) { + STATIC_ASSERT(sizeof(def->fields[i]) == 3); if (!readData((char*)&(def->fields[i]), sizeof(def->fields[i]))) return false; _len -= sizeof(def->fields[i]); @@ -134,6 +136,7 @@ bool FITParser::parseDefinitionMessage(quint8 header) def->devFields = new Field[def->numDevFields]; for (i = 0; i < def->numDevFields; i++) { + STATIC_ASSERT(sizeof(def->devFields[i]) == 3); if (!readData((char*)&(def->devFields[i]), sizeof(def->devFields[i]))) return false; @@ -302,6 +305,7 @@ bool FITParser::parseHeader() quint16 crc; qint64 len; + STATIC_ASSERT(sizeof(hdr) == 12); len = _device->read((char*)&hdr, sizeof(hdr)); if (len < 0) { _errorString = "I/O error";