| 1 | /* zendian.h -- define BYTE_ORDER for endian tests | 
| 2 |  * For conditions of distribution and use, see copyright notice in zlib.h | 
| 3 |  */ | 
| 4 |  | 
| 5 | #ifndef ENDIAN_H_ | 
| 6 | #define ENDIAN_H_ | 
| 7 |  | 
| 8 | /* First check whether the compiler knows the target __BYTE_ORDER__. */ | 
| 9 | #if defined(__BYTE_ORDER__) | 
| 10 | #  if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ | 
| 11 | #    if !defined(LITTLE_ENDIAN) | 
| 12 | #      define LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__ | 
| 13 | #    endif | 
| 14 | #    if !defined(BYTE_ORDER) | 
| 15 | #      define BYTE_ORDER LITTLE_ENDIAN | 
| 16 | #    endif | 
| 17 | #  elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ | 
| 18 | #    if !defined(BIG_ENDIAN) | 
| 19 | #      define BIG_ENDIAN __ORDER_BIG_ENDIAN__ | 
| 20 | #    endif | 
| 21 | #    if !defined(BYTE_ORDER) | 
| 22 | #      define BYTE_ORDER BIG_ENDIAN | 
| 23 | #    endif | 
| 24 | #  endif | 
| 25 | #elif defined(__MINGW32__) | 
| 26 | #  include <sys/param.h> | 
| 27 | #elif defined(_WIN32) | 
| 28 | #  define LITTLE_ENDIAN 1234 | 
| 29 | #  define BIG_ENDIAN 4321 | 
| 30 | #  if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64) || defined (_M_ARM) || defined (_M_ARM64) | 
| 31 | #    define BYTE_ORDER LITTLE_ENDIAN | 
| 32 | #  else | 
| 33 | #    error Unknown endianness! | 
| 34 | #  endif | 
| 35 | #elif defined(__linux__) | 
| 36 | #  include <endian.h> | 
| 37 | #elif defined(__APPLE__) || defined(__arm__) || defined(__aarch64__) | 
| 38 | #  include <machine/endian.h> | 
| 39 | #elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__DragonFly__) | 
| 40 | #  include <sys/endian.h> | 
| 41 | #elif defined(__sun) || defined(sun) | 
| 42 | #  include <sys/byteorder.h> | 
| 43 | #  if !defined(LITTLE_ENDIAN) | 
| 44 | #    define LITTLE_ENDIAN 4321 | 
| 45 | #   endif | 
| 46 | #  if !defined(BIG_ENDIAN) | 
| 47 | #    define BIG_ENDIAN 1234 | 
| 48 | #  endif | 
| 49 | #  if !defined(BYTE_ORDER) | 
| 50 | #    if defined(_BIG_ENDIAN) | 
| 51 | #      define BYTE_ORDER BIG_ENDIAN | 
| 52 | #    else | 
| 53 | #      define BYTE_ORDER LITTLE_ENDIAN | 
| 54 | #    endif | 
| 55 | #  endif | 
| 56 | #else | 
| 57 | #  include <endian.h> | 
| 58 | #endif | 
| 59 |  | 
| 60 | #endif | 
| 61 |  |