diff options
author | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2018-09-21 20:20:37 +0000 |
---|---|---|
committer | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2018-09-21 20:20:37 +0000 |
commit | ec54090892935cabf60f9aec7271036fc534596c (patch) | |
tree | f72bc4f1ffde1374e75a0e7023490815e55e2f9c /user/labplot/liborigin-endian.patch | |
parent | 8e92bb1426f90f6ac45f0e068d6c0378df9ac71a (diff) | |
download | packages-ec54090892935cabf60f9aec7271036fc534596c.tar.gz packages-ec54090892935cabf60f9aec7271036fc534596c.tar.bz2 packages-ec54090892935cabf60f9aec7271036fc534596c.tar.xz packages-ec54090892935cabf60f9aec7271036fc534596c.zip |
user/labplot: fix endianness (upstream #398342)
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), |