libam7xxx  0.1
Communication library for Actions Micro AM7XXX based USB projectors and DPFs
portable_endian.h
1 /*
2  * Public domain, stripped down version of:
3  * https://gist.github.com/panzi/6856583
4  */
5 
6 #ifndef __PORTABLE_ENDIAN_H
7 #define __PORTABLE_ENDIAN_H
8 
9 #if (defined(_WIN16) || defined(_WIN32) || defined(_WIN64)) && !defined(__WINDOWS__)
10 
11 # define __WINDOWS__
12 
13 #endif
14 
15 #if defined(__linux__) || defined(__CYGWIN__)
16 
17 # include <endian.h>
18 
19 #elif defined(__APPLE__)
20 
21 # include <libkern/OSByteOrder.h>
22 
23 # define htole32(x) OSSwapHostToLittleInt32(x)
24 # define le32toh(x) OSSwapLittleToHostInt32(x)
25 
26 #elif defined(__OpenBSD__)
27 
28 # include <sys/endian.h>
29 
30 #elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__)
31 
32 # include <sys/endian.h>
33 
34 # define le32toh(x) letoh32(x)
35 
36 #elif defined(__WINDOWS__)
37 
38 # include <winsock2.h>
39 # include <sys/param.h>
40 
41 # if BYTE_ORDER == LITTLE_ENDIAN
42 
43 # define htole32(x) (x)
44 # define le32toh(x) (x)
45 
46 # elif BYTE_ORDER == BIG_ENDIAN
47 
48  /* that would be xbox 360 */
49 
50 # define htole32(x) __builtin_bswap32(x)
51 # define le32toh(x) __builtin_bswap32(x)
52 
53 # else
54 
55 # error byte order not supported
56 
57 # endif
58 
59 #else
60 
61 #error platform not supported
62 
63 #endif
64 
65 #endif /* __PORTABLE_ENDIAN_H */