Skip to content

Commit 8c83add

Browse files
committed
Fix bswap on *BSD
`#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.
1 parent f77fb0f commit 8c83add

File tree

1 file changed

+30
-8
lines changed

1 file changed

+30
-8
lines changed

asyncpg/protocol/hton.h

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,47 @@
22

33
#if defined(__linux__) || defined(__CYGWIN__)
44
#include <endian.h>
5-
#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)
6-
#include <sys/endian.h>
7-
#elif defined(__DragonFly__)
5+
#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) \
6+
|| defined(__DragonFly__)
87
#include <sys/endian.h>
98
#elif defined(__APPLE__)
109
#include <libkern/OSByteOrder.h>
11-
#define __BYTE_ORDER BYTE_ORDER
12-
#define __BIG_ENDIAN BIG_ENDIAN
13-
#define __LITTLE_ENDIAN LITTLE_ENDIAN
1410
#elif defined(_WIN32) || defined(_WIN64) || defined(__WINDOWS__)
1511
/* Assume Windows is always LE. There seems to be no reliable way
1612
to detect endianness there */
1713
#define __LITTLE_ENDIAN 1234
1814
#define __BIG_ENDIAN 4321
1915
#define __BYTE_ORDER __LITTLE_ENDIAN
20-
#else
21-
#error Cannot determine platform byte order.
2216
#endif
2317

18+
#if defined(_BYTE_ORDER) && !defined(__BYTE_ORDER)
19+
#define __BYTE_ORDER _BYTE_ORDER
20+
#endif
21+
22+
#if defined(BYTE_ORDER) && !defined(__BYTE_ORDER)
23+
#define __BYTE_ORDER BYTE_ORDER
24+
#endif
25+
26+
#if defined(_LITTLE_ENDIAN) && !defined(__LITTLE_ENDIAN)
27+
#define __LITTLE_ENDIAN _LITTLE_ENDIAN
28+
#endif
29+
30+
#if defined(LITTLE_ENDIAN) && !defined(__LITTLE_ENDIAN)
31+
#define __LITTLE_ENDIAN LITTLE_ENDIAN
32+
#endif
33+
34+
#if defined(_BIG_ENDIAN) && !defined(__BIG_ENDIAN)
35+
#define __BIG_ENDIAN _BIG_ENDIAN
36+
#endif
37+
38+
#if defined(BIG_ENDIAN) && !defined(__BIG_ENDIAN)
39+
#define __BIG_ENDIAN BIG_ENDIAN
40+
#endif
41+
42+
#if !defined(__BYTE_ORDER) || !defined(__LITTLE_ENDIAN) \
43+
|| !defined(__BIG_ENDIAN)
44+
#error Cannot determine platform byte order.
45+
#endif
2446

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

0 commit comments

Comments
 (0)