Skip to content

Commit

Permalink
Fix bswap on *BSD
Browse files Browse the repository at this point in the history
`#if FOO == BAR` is true if neither BAR, nor FOO are defined, and on
BSDs machine endianness is declared as `_BYTE_ORDER`, not
`__BYTE_ORDER`, so we would compile a big-endian variant on
little-endian machines.

Fixes #313.
  • Loading branch information
elprans committed Jun 11, 2018
1 parent f77fb0f commit 8c83add
Showing 1 changed file with 30 additions and 8 deletions.
38 changes: 30 additions & 8 deletions asyncpg/protocol/hton.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,47 @@

#if defined(__linux__) || defined(__CYGWIN__)
#include <endian.h>
#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)
#include <sys/endian.h>
#elif defined(__DragonFly__)
#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) \
|| defined(__DragonFly__)
#include <sys/endian.h>
#elif defined(__APPLE__)
#include <libkern/OSByteOrder.h>
#define __BYTE_ORDER BYTE_ORDER
#define __BIG_ENDIAN BIG_ENDIAN
#define __LITTLE_ENDIAN LITTLE_ENDIAN
#elif defined(_WIN32) || defined(_WIN64) || defined(__WINDOWS__)
/* Assume Windows is always LE. There seems to be no reliable way
to detect endianness there */
#define __LITTLE_ENDIAN 1234
#define __BIG_ENDIAN 4321
#define __BYTE_ORDER __LITTLE_ENDIAN
#else
#error Cannot determine platform byte order.
#endif

#if defined(_BYTE_ORDER) && !defined(__BYTE_ORDER)
#define __BYTE_ORDER _BYTE_ORDER
#endif

#if defined(BYTE_ORDER) && !defined(__BYTE_ORDER)
#define __BYTE_ORDER BYTE_ORDER
#endif

#if defined(_LITTLE_ENDIAN) && !defined(__LITTLE_ENDIAN)
#define __LITTLE_ENDIAN _LITTLE_ENDIAN
#endif

#if defined(LITTLE_ENDIAN) && !defined(__LITTLE_ENDIAN)
#define __LITTLE_ENDIAN LITTLE_ENDIAN
#endif

#if defined(_BIG_ENDIAN) && !defined(__BIG_ENDIAN)
#define __BIG_ENDIAN _BIG_ENDIAN
#endif

#if defined(BIG_ENDIAN) && !defined(__BIG_ENDIAN)
#define __BIG_ENDIAN BIG_ENDIAN
#endif

#if !defined(__BYTE_ORDER) || !defined(__LITTLE_ENDIAN) \
|| !defined(__BIG_ENDIAN)
#error Cannot determine platform byte order.
#endif

#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__)

Expand Down

0 comments on commit 8c83add

Please sign in to comment.