summaryrefslogtreecommitdiff
path: root/user/labplot/liborigin-endian.patch
diff options
context:
space:
mode:
Diffstat (limited to 'user/labplot/liborigin-endian.patch')
-rw-r--r--user/labplot/liborigin-endian.patch26
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),