xref: /lighttpd1.4/src/sys-endian.h (revision 0f38b391)
1 #ifndef LI_SYS_ENDIAN_H
2 #define LI_SYS_ENDIAN_H
3 #include "first.h"
4 
5 
6 #if !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
7 
8 
9 /* copied from of plasma_endian.h
10  * https://github.com/gstrauss/plasma/blob/master/plasma_endian.h
11  * (used with permission from the author (gstrauss)) */
12 #if defined(__BYTE_ORDER__)              \
13  && (   defined(__ORDER_LITTLE_ENDIAN__) \
14      || defined(__ORDER_BIG_ENDIAN__)    \
15      || defined(__ORDER_PDP_ENDIAN__)   )
16   #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
17   #define __LITTLE_ENDIAN__ 1
18   #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
19   #define __BIG_ENDIAN__ 1
20   #endif
21 #elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
22   #define __LITTLE_ENDIAN__ 1
23 #elif !defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN)
24   #define __BIG_ENDIAN__ 1
25 #elif defined(_WIN32) /* little endian on all current MS-supported platforms */
26   #define __LITTLE_ENDIAN__ 1
27 #elif defined(__GLIBC__) || defined(__linux__)
28   #include <endian.h>
29   #if __BYTE_ORDER == __LITTLE_ENDIAN
30   #define __LITTLE_ENDIAN__ 1
31   #elif __BYTE_ORDER == __BIG_ENDIAN
32   #define __BIG_ENDIAN__ 1
33   #endif
34 #elif defined(__sun__) && defined(__SVR4)
35   #include <sys/isa_defs.h>
36   #if defined(_LITTLE_ENDIAN)
37   #define __LITTLE_ENDIAN__ 1
38   #elif defined(_BIG_ENDIAN)
39   #define __BIG_ENDIAN__ 1
40   #endif
41 #elif defined(_AIX)
42   #include <sys/machine.h>
43   #if BYTE_ORDER == LITTLE_ENDIAN
44   #define __LITTLE_ENDIAN__ 1
45   #elif BYTE_ORDER == BIG_ENDIAN
46   #define __BIG_ENDIAN__ 1
47   #endif
48 #elif defined(__APPLE__) && defined(__MACH__)
49   #include <machine/endian.h>
50   #if BYTE_ORDER == LITTLE_ENDIAN
51   #define __LITTLE_ENDIAN__ 1
52   #elif BYTE_ORDER == BIG_ENDIAN
53   #define __BIG_ENDIAN__ 1
54   #endif
55 #elif defined(__FreeBSD__) || defined(__NetBSD__) \
56    || defined(__OpenBSD__) || defined(__DragonFly__)
57   #include <machine/endian.h>
58   #if _BYTE_ORDER == _LITTLE_ENDIAN
59   #define __LITTLE_ENDIAN__ 1
60   #elif _BYTE_ORDER == _BIG_ENDIAN
61   #define __BIG_ENDIAN__ 1
62   #endif
63 #else /*(else assume little endian)*/
64   #define __LITTLE_ENDIAN__ 1
65 #endif
66 
67 
68 #endif /* !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) */
69 
70 
71 #endif
72