Loading...
Searching...
No Matches
portable_endian.h
/*
* Public domain, stripped down version of:
* https://gist.github.com/panzi/6856583
*/
#ifndef __PORTABLE_ENDIAN_H
#define __PORTABLE_ENDIAN_H
#if (defined(_WIN16) || defined(_WIN32) || defined(_WIN64)) && !defined(__WINDOWS__)
# define __WINDOWS__
#endif
#if defined(__linux__) || defined(__gnu_hurd__) || defined(__CYGWIN__)
# include <endian.h>
#elif defined(__APPLE__)
# include <libkern/OSByteOrder.h>
# define htole32(x) OSSwapHostToLittleInt32(x)
# define le32toh(x) OSSwapLittleToHostInt32(x)
#elif defined(__OpenBSD__)
# include <sys/endian.h>
#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__)
# include <sys/endian.h>
# define le32toh(x) letoh32(x)
#elif defined(__WINDOWS__)
# include <winsock2.h>
# include <sys/param.h>
# if BYTE_ORDER == LITTLE_ENDIAN
# define htole32(x) (x)
# define le32toh(x) (x)
# elif BYTE_ORDER == BIG_ENDIAN
/* that would be xbox 360 */
# define htole32(x) __builtin_bswap32(x)
# define le32toh(x) __builtin_bswap32(x)
# else
# error byte order not supported
# endif
#else
#error platform not supported
#endif
#endif /* __PORTABLE_ENDIAN_H */