Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f86ea02d authored by Elliott Hughes's avatar Elliott Hughes
Browse files

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
parent 5af75ed1
Loading
Loading
Loading
Loading
+15 −10
Original line number Diff line number Diff line
@@ -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)