4e3e51b6 |
1 | //----------------------------------------------------------------------------- |
2 | // Copyright (C) 2010 Hector Martin "marcan" <marcan@marcansoft.com> |
3 | // |
4 | // This code is licensed to you under the terms of the GNU GPL, version 2 or, |
5 | // at your option, any later version. See the LICENSE.txt file for the text of |
6 | // the license. |
7 | //----------------------------------------------------------------------------- |
8 | // Endianness convenience functions |
9 | //----------------------------------------------------------------------------- |
10 | |
11 | #ifndef PROXENDIAN_H__ |
12 | #define PROXENDIAN_H__ |
13 | |
14 | #include <stdint.h> |
15 | |
19d9a7b0 |
16 | #ifdef _WIN32 |
4e3e51b6 |
17 | # define HOST_LITTLE_ENDIAN |
18 | #else |
19 | # include <sys/types.h> |
19d9a7b0 |
20 | # ifndef BYTE_ORDER |
21 | # define BYTE_ORDER __BYTE_ORDER |
22 | # define LITTLE_ENDIAN __LITTLE_ENDIAN |
23 | # define BIG_ENDIAN __BIG_ENDIAN |
24 | # endif |
4e3e51b6 |
25 | # if !defined(BYTE_ORDER) || (BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER != BIG_ENDIAN) |
26 | # error Define BYTE_ORDER to be equal to either LITTLE_ENDIAN or BIG_ENDIAN |
27 | # endif |
4e3e51b6 |
28 | # if BYTE_ORDER == LITTLE_ENDIAN |
29 | # define HOST_LITTLE_ENDIAN |
30 | # endif |
31 | #endif |
32 | |
33 | #ifdef HOST_LITTLE_ENDIAN |
34 | # define le16(x) (x) |
35 | # define le32(x) (x) |
36 | #else |
37 | |
38 | static inline uint16_t le16(uint16_t v) |
39 | { |
40 | return (v>>8) | (v<<8); |
41 | } |
42 | |
43 | static inline uint32_t le32(uint32_t v) |
44 | { |
45 | return (le16(v)<<16) | (le16(v>>16)); |
46 | } |
47 | #endif // HOST_LITTLE_ENDIAN |
48 | |
49 | #endif // PROXENDIAN_H__ |