| #define PORTABLE_ENDIAN_H__ | #define PORTABLE_ENDIAN_H__ | ||||
| #if (defined(_WIN16) || defined(_WIN32) || defined(_WIN64)) && !defined(__WINDOWS__) | #if (defined(_WIN16) || defined(_WIN32) || defined(_WIN64)) && !defined(__WINDOWS__) | ||||
| # define __WINDOWS__ | # define __WINDOWS__ | ||||
| #endif | #endif | ||||
| #if defined(__linux__) || defined(__CYGWIN__) | #if defined(__linux__) || defined(__CYGWIN__) | ||||
| # include <endian.h> | # include <endian.h> | ||||
| #elif defined(__APPLE__) | #elif defined(__APPLE__) | ||||
| # include <libkern/OSByteOrder.h> | # include <libkern/OSByteOrder.h> | ||||
| # define htobe16(x) OSSwapHostToBigInt16(x) | # define htobe16(x) OSSwapHostToBigInt16(x) | ||||
| # define __BIG_ENDIAN BIG_ENDIAN | # define __BIG_ENDIAN BIG_ENDIAN | ||||
| # define __LITTLE_ENDIAN LITTLE_ENDIAN | # define __LITTLE_ENDIAN LITTLE_ENDIAN | ||||
| # define __PDP_ENDIAN PDP_ENDIAN | # define __PDP_ENDIAN PDP_ENDIAN | ||||
| #elif defined(__OpenBSD__) | #elif defined(__OpenBSD__) | ||||
| # include <sys/endian.h> | # include <sys/endian.h> | ||||
| #elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) | #elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) | ||||
| # include <sys/endian.h> | # include <sys/endian.h> | ||||
| # define be16toh(x) betoh16(x) | # define be16toh(x) betoh16(x) | ||||
| # define be64toh(x) betoh64(x) | # define be64toh(x) betoh64(x) | ||||
| # define le64toh(x) letoh64(x) | # define le64toh(x) letoh64(x) | ||||
| #elif defined(__WINDOWS__) | #elif defined(__WINDOWS__) | ||||
| # include <winsock2.h> | # include <winsock2.h> | ||||
| # include <sys/param.h> | # include <sys/param.h> | ||||
| # if BYTE_ORDER == LITTLE_ENDIAN | # if BYTE_ORDER == LITTLE_ENDIAN | ||||
| # define htobe16(x) htons(x) | # define htobe16(x) htons(x) | ||||
| # define htole16(x) (x) | # define htole16(x) (x) | ||||
| # define be16toh(x) ntohs(x) | # define be16toh(x) ntohs(x) | ||||
| # define htole64(x) (x) | # define htole64(x) (x) | ||||
| # define be64toh(x) ntohll(x) | # define be64toh(x) ntohll(x) | ||||
| # define le64toh(x) (x) | # define le64toh(x) (x) | ||||
| # elif BYTE_ORDER == BIG_ENDIAN | # elif BYTE_ORDER == BIG_ENDIAN | ||||
| /* that would be xbox 360 */ | /* that would be xbox 360 */ | ||||
| # define htobe16(x) (x) | # define htobe16(x) (x) | ||||
| # define htole16(x) __builtin_bswap16(x) | # define htole16(x) __builtin_bswap16(x) | ||||
| # define htole64(x) __builtin_bswap64(x) | # define htole64(x) __builtin_bswap64(x) | ||||
| # define be64toh(x) (x) | # define be64toh(x) (x) | ||||
| # define le64toh(x) __builtin_bswap64(x) | # define le64toh(x) __builtin_bswap64(x) | ||||
| # else | # else | ||||
| # error byte order not supported | # error byte order not supported | ||||
| # endif | # endif | ||||
| # define __BYTE_ORDER BYTE_ORDER | # define __BYTE_ORDER BYTE_ORDER | ||||
| # define __BIG_ENDIAN BIG_ENDIAN | # define __BIG_ENDIAN BIG_ENDIAN | ||||
| # define __LITTLE_ENDIAN LITTLE_ENDIAN | # define __LITTLE_ENDIAN LITTLE_ENDIAN | ||||
| # define __PDP_ENDIAN PDP_ENDIAN | # define __PDP_ENDIAN PDP_ENDIAN | ||||
| #else | #else | ||||
| # error platform not supported | # error platform not supported | ||||
| #endif | #endif | ||||
| #endif | #endif |