Merge pull request #28 from zeldin/testing

SfoReader: Convert little endian fields to host endian
This commit is contained in:
codestation
2016-04-24 11:07:12 -04:30

View File

@@ -21,6 +21,21 @@
#define SFOREADER_H #define SFOREADER_H
#include <QString> #include <QString>
#include <QtEndian>
template<class T> class uilsb
{
public:
operator T () const { return qFromLittleEndian<T>(data); }
const T operator=(const T v) {
qToLittleEndian<T>(v, data);
return v;
}
private:
static const int nBytes = sizeof(T);
uchar data[nBytes];
};
class SfoReader class SfoReader
{ {
@@ -31,21 +46,21 @@ public:
private: private:
typedef struct { typedef struct {
quint16 key_offset; uilsb<quint16> key_offset;
uchar alignment; uchar alignment;
uchar data_type; uchar data_type;
quint32 value_size; uilsb<quint32> value_size;
quint32 value_size_with_padding; uilsb<quint32> value_size_with_padding;
quint32 data_offset; uilsb<quint32> data_offset;
} __attribute__((packed)) sfo_index; } sfo_index;
typedef struct { typedef struct {
char id[4]; char id[4];
quint32 version; uilsb<quint32> version;
quint32 key_offset; uilsb<quint32> key_offset;
quint32 value_offset; uilsb<quint32> value_offset;
quint32 pair_count; uilsb<quint32> pair_count;
} __attribute__((packed)) sfo_header; } sfo_header;
QByteArray data; QByteArray data;
const char *key_offset; const char *key_offset;