From 77f38e4449682178c9769a1010af9a10e5cf7fc1 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Thu, 28 Feb 2019 16:31:08 +0100 Subject: [PATCH] Travis: restore build on GCC 4.4 --- .travis.yml | 6 ++++++ src/ArduinoJson/Configuration.hpp | 2 +- src/ArduinoJson/MsgPack/endianess.hpp | 19 +++++++++++-------- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index c0233eab..b2bad392 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,12 @@ sudo: false language: cpp matrix: include: + - compiler: gcc + addons: + apt: + sources: ['ubuntu-toolchain-r-test'] + packages: ['g++-4.4'] + env: SCRIPT=cmake GCC=4.4 - compiler: gcc addons: apt: diff --git a/src/ArduinoJson/Configuration.hpp b/src/ArduinoJson/Configuration.hpp index 1b9dd9fc..c34264bd 100644 --- a/src/ArduinoJson/Configuration.hpp +++ b/src/ArduinoJson/Configuration.hpp @@ -139,7 +139,7 @@ #ifndef ARDUINOJSON_LITTLE_ENDIAN #if defined(_MSC_VER) || \ (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || \ - (defined(__LITTLE_ENDIAN__)) + defined(__LITTLE_ENDIAN__) || defined(__i386) || defined(__x86_64) #define ARDUINOJSON_LITTLE_ENDIAN 1 #else #define ARDUINOJSON_LITTLE_ENDIAN 0 diff --git a/src/ArduinoJson/MsgPack/endianess.hpp b/src/ArduinoJson/MsgPack/endianess.hpp index 73c808c1..e44129cc 100644 --- a/src/ArduinoJson/MsgPack/endianess.hpp +++ b/src/ArduinoJson/MsgPack/endianess.hpp @@ -9,30 +9,33 @@ namespace ARDUINOJSON_NAMESPACE { -inline void fixEndianess(uint8_t* p, integral_constant) { +#if ARDUINOJSON_LITTLE_ENDIAN +inline void fixEndianess(uint8_t *p, integral_constant) { swap(p[0], p[7]); swap(p[1], p[6]); swap(p[2], p[5]); swap(p[3], p[4]); } -inline void fixEndianess(uint8_t* p, integral_constant) { +inline void fixEndianess(uint8_t *p, integral_constant) { swap(p[0], p[3]); swap(p[1], p[2]); } -inline void fixEndianess(uint8_t* p, integral_constant) { +inline void fixEndianess(uint8_t *p, integral_constant) { swap(p[0], p[1]); } -inline void fixEndianess(uint8_t*, integral_constant) {} +inline void fixEndianess(uint8_t *, integral_constant) {} template -inline void fixEndianess(T& value) { -#if ARDUINOJSON_LITTLE_ENDIAN - fixEndianess(reinterpret_cast(&value), +inline void fixEndianess(T &value) { + fixEndianess(reinterpret_cast(&value), integral_constant()); -#endif } +#else +template +inline void fixEndianess(T &) {} +#endif } // namespace ARDUINOJSON_NAMESPACE