Use as much of the macOS endian support as we can.

Turns out that although there's no <endian.h> or <sys/endian.h>, there
are <machine/endian.h> and <sys/_endian.h>, and they're included by
other system headers such as <dirent.h>.

Reuse the contents of <sys/_endian.h> here for better interop.

Bug: http://b/139203733
Test: treehugger
Change-Id: Ic0e9bfa1a5b56d05e9e542839d237b6ceae4aa8c
This commit is contained in:
Elliott Hughes 2019-08-12 12:04:05 -07:00
parent 5af75ed172
commit f86ea02de6
1 changed files with 15 additions and 10 deletions

View File

@ -41,23 +41,28 @@
#else
/* Mac OS and Windows have nothing. */
#define __LITTLE_ENDIAN 1234
#if defined(__APPLE__)
/* macOS has some of the basics. */
#include <sys/_endian.h>
#else
/* Windows really has nothing. */
#define LITTLE_ENDIAN __LITTLE_ENDIAN
#define __BIG_ENDIAN 4321
#define BIG_ENDIAN __BIG_ENDIAN
#define __BYTE_ORDER __LITTLE_ENDIAN
#define BYTE_ORDER __BYTE_ORDER
#define htons(x) __builtin_bswap16(x)
#define htonl(x) __builtin_bswap32(x)
#define htonq(x) __builtin_bswap64(x)
#define ntohs(x) __builtin_bswap16(x)
#define ntohl(x) __builtin_bswap32(x)
#endif
/* Neither macOS nor Windows have the rest. */
#define __LITTLE_ENDIAN 1234
#define __BIG_ENDIAN 4321
#define __BYTE_ORDER __LITTLE_ENDIAN
#define htonq(x) __builtin_bswap64(x)
#define ntohq(x) __builtin_bswap64(x)
#define htobe16(x) __builtin_bswap16(x)