diff options
Diffstat (limited to 'user/labplot/liborigin-endian.patch')
-rw-r--r-- | user/labplot/liborigin-endian.patch | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/user/labplot/liborigin-endian.patch b/user/labplot/liborigin-endian.patch new file mode 100644 index 000000000..b40782a3a --- /dev/null +++ b/user/labplot/liborigin-endian.patch @@ -0,0 +1,26 @@ +diff --git a/OriginAnyParser.cpp b/OriginAnyParser.cpp +index c9e863e..2637945 100644 +--- a/liborigin/OriginAnyParser.cpp ++++ b/liborigin/OriginAnyParser.cpp +@@ -24,10 +24,18 @@ + #include <cinttypes> + + /* define a macro to get an int (or uint) from a istringstream in binary mode */ +-#define GET_INT(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 4);}; +-#define GET_SHORT(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 2);}; +-#define GET_FLOAT(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 4);}; ++#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ ++#define GET_SHORT(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 2);}; ++#define GET_INT(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 4);}; ++#define GET_FLOAT(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 4);}; + #define GET_DOUBLE(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 8);}; ++#else ++void inline swap_bytes(unsigned char* data, int size) {int i = 0, j = size - 1; while(i < j) {std::swap(data[i], data[j]); ++i, --j;}} ++#define GET_SHORT(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 2); swap_bytes(reinterpret_cast<unsigned char *>(&ovalue), 2);}; ++#define GET_INT(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 4); swap_bytes(reinterpret_cast<unsigned char *>(&ovalue), 4);}; ++#define GET_FLOAT(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 4); swap_bytes(reinterpret_cast<unsigned char *>(&ovalue), 4);}; ++#define GET_DOUBLE(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 8); swap_bytes(reinterpret_cast<unsigned char *>(&ovalue), 8);}; ++#endif + + OriginAnyParser::OriginAnyParser(const string& fileName) + : file(fileName.c_str(),ios::binary), |