Skip to content

Commit 1fbc6e6

Browse files
committed
Merge branch 'cb/byte-order' into maint
* cb/byte-order: compat/bswap.h: fix endianness detection compat/bswap.h: restore preference __BIG_ENDIAN over BIG_ENDIAN compat/bswap.h: detect endianness on more platforms that don't use BYTE_ORDER
2 parents 85dd379 + 9c65ee1 commit 1fbc6e6

File tree

1 file changed

+24
-9
lines changed

1 file changed

+24
-9
lines changed

compat/bswap.h

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -101,19 +101,34 @@ static inline uint64_t git_bswap64(uint64_t x)
101101
#undef ntohll
102102
#undef htonll
103103

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(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
124+
# define GIT_BYTE_ORDER GIT_LITTLE_ENDIAN
125+
# else
126+
# error "Cannot determine endianness"
109127
# endif
110-
#endif
111128

112-
#if !defined(__BYTE_ORDER)
113-
# error "Cannot determine endianness"
114129
#endif
115130

116-
#if __BYTE_ORDER == __BIG_ENDIAN
131+
#if GIT_BYTE_ORDER == GIT_BIG_ENDIAN
117132
# define ntohll(n) (n)
118133
# define htonll(n) (n)
119134
#else

0 commit comments

Comments
 (0)