From 90a6e39ddcef014b2c06259833869de6a27c8ba2 Mon Sep 17 00:00:00 2001 From: Marcus Comstedt Date: Sun, 10 May 2015 18:24:01 +0200 Subject: [PATCH] SfoReader: Convert little endian fields to host endian --- common/sforeader.h | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/common/sforeader.h b/common/sforeader.h index e387aa2..e2406ea 100644 --- a/common/sforeader.h +++ b/common/sforeader.h @@ -21,6 +21,21 @@ #define SFOREADER_H #include +#include + +template class uilsb +{ +public: + operator T () const { return qFromLittleEndian(data); } + const T operator=(const T v) { + qToLittleEndian(v, data); + return v; + } + +private: + static const int nBytes = sizeof(T); + uchar data[nBytes]; +}; class SfoReader { @@ -31,21 +46,21 @@ public: private: typedef struct { - quint16 key_offset; + uilsb key_offset; uchar alignment; uchar data_type; - quint32 value_size; - quint32 value_size_with_padding; - quint32 data_offset; - } __attribute__((packed)) sfo_index; + uilsb value_size; + uilsb value_size_with_padding; + uilsb data_offset; + } sfo_index; typedef struct { char id[4]; - quint32 version; - quint32 key_offset; - quint32 value_offset; - quint32 pair_count; - } __attribute__((packed)) sfo_header; + uilsb version; + uilsb key_offset; + uilsb value_offset; + uilsb pair_count; + } sfo_header; QByteArray data; const char *key_offset;