a201c20 (ewah: support platforms that require aligned reads) added a reliance on the existence of __BYTE_ORDER and __BIG_ENDIAN. However, these macros are spelled without the leading __ on some platforms (OS X at least). In this case, the endian-swapping code was added even when unnecessary, which caused assertion failures in t5310-pack-bitmaps.sh as the code that used the bitmap would read past the end. We already had code to handle this case in compat/bswap.h, but it was only used if we couldn't already find a reasonable version of bswap64. Move the macro-defining and checking code out of a conditional so that either __BYTE_ORDER is defined or we get a compilation error instead of a runtime error in the bitmap code. Signed-off-by: Brian Gernhardt <brian@xxxxxxxxxxxxxxxxxxxxx> --- compat/bswap.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/compat/bswap.h b/compat/bswap.h index 120c6c1..7db09d6 100644 --- a/compat/bswap.h +++ b/compat/bswap.h @@ -80,6 +80,18 @@ static inline uint64_t git_bswap64(uint64_t x) #endif +#if !defined(__BYTE_ORDER) +# if defined(BYTE_ORDER) && defined(LITTLE_ENDIAN) && defined(BIG_ENDIAN) +# define __BYTE_ORDER BYTE_ORDER +# define __LITTLE_ENDIAN LITTLE_ENDIAN +# define __BIG_ENDIAN BIG_ENDIAN +# endif +#endif + +#if !defined(__BYTE_ORDER) +# error "Cannot determine endianness" +#endif + #if defined(bswap32) #undef ntohl @@ -101,18 +113,6 @@ static inline uint64_t git_bswap64(uint64_t x) #undef ntohll #undef htonll -#if !defined(__BYTE_ORDER) -# if defined(BYTE_ORDER) && defined(LITTLE_ENDIAN) && defined(BIG_ENDIAN) -# define __BYTE_ORDER BYTE_ORDER -# define __LITTLE_ENDIAN LITTLE_ENDIAN -# define __BIG_ENDIAN BIG_ENDIAN -# endif -#endif - -#if !defined(__BYTE_ORDER) -# error "Cannot determine endianness" -#endif - #if __BYTE_ORDER == __BIG_ENDIAN # define ntohll(n) (n) # define htonll(n) (n) -- 1.9.rc0.256.gbc3fa69 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html