compat/bswap.h: detect endianness on more platforms that don't use BYTE_ORDER
Signed-off-by: Charles Bailey <cbailey32@bloomberg.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Charles Bailey committed
May 2, 2014 at 08:55 UTC
3cf6bb34063406e107f51aa52db67d65839f5e58
1 file changed
+24
-9
compat/bswap.h
+24
-9
@@ -101,19 +101,34 @@ static inline uint64_t git_bswap64(uint64_t x)
101
#undef ntohll
102
#undef htonll
103
104
-#if !defined(__BYTE_ORDER)
105
-# if defined(BYTE_ORDER) && defined(LITTLE_ENDIAN) && defined(BIG_ENDIAN)
106
-# define __BYTE_ORDER BYTE_ORDER
107
-# define __LITTLE_ENDIAN LITTLE_ENDIAN
108
-# define __BIG_ENDIAN BIG_ENDIAN
104
+#if defined(BYTE_ORDER) && defined(LITTLE_ENDIAN) && defined(BIG_ENDIAN)
105
+
106
+# define GIT_BYTE_ORDER BYTE_ORDER
107
+# define GIT_LITTLE_ENDIAN LITTLE_ENDIAN
108
+# define GIT_BIG_ENDIAN BIG_ENDIAN
109
+
110
+#elif defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && defined(__BIG_ENDIAN)
111
+
112
+# define GIT_BYTE_ORDER __BYTE_ORDER
113
+# define GIT_LITTLE_ENDIAN __LITTLE_ENDIAN
114
+# define GIT_BIG_ENDIAN __BIG_ENDIAN
115
+
116
+#else
117
+
118
+# define GIT_BIG_ENDIAN 4321
119
+# define GIT_LITTLE_ENDIAN 1234
120
+
121
+# if defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)
122
+# define GIT_BYTE_ORDER GIT_BIG_ENDIAN
123
+# elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)
124
+# define GIT_BYTE_ORDER GIT_LITTLE_ENDIAN
125
+# else
126
+# error "Cannot determine endianness"
127
# endif
110
-#endif
128
112
-#if !defined(__BYTE_ORDER)
113
-# error "Cannot determine endianness"
129
#endif
130
116
-#if __BYTE_ORDER == __BIG_ENDIAN
131
+#if GIT_BYTE_ORDER == GIT_BIG_ENDIAN
132
# define ntohll(n) (n)
133
# define htonll(n) (n)
134
#else