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