| /* |
| platform.h (14.05.13) |
| OS-specific code (libc-specific in fact). Note that systems with the |
| same kernel can use different libc implementations. |
| |
| Copyright (C) 2010-2013 Andrew Nayenko |
| |
| This program is free software: you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation, either version 3 of the License, or |
| (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program. If not, see <http://www.gnu.org/licenses/>. |
| */ |
| |
| #ifndef PLATFORM_H_INCLUDED |
| #define PLATFORM_H_INCLUDED |
| |
| #if defined(__GLIBC__) |
| |
| #include <endian.h> |
| #include <byteswap.h> |
| |
| #elif defined(__APPLE__) |
| |
| #include <machine/endian.h> |
| #include <libkern/OSByteOrder.h> |
| #define bswap_16(x) OSSwapInt16(x) |
| #define bswap_32(x) OSSwapInt32(x) |
| #define bswap_64(x) OSSwapInt64(x) |
| #define __BYTE_ORDER BYTE_ORDER |
| #define __LITTLE_ENDIAN LITTLE_ENDIAN |
| #define __BIG_ENDIAN BIG_ENDIAN |
| |
| #elif defined(__FreeBSD__) || defined(__DragonFlyBSD__) || defined(__NetBSD__) |
| |
| #include <sys/endian.h> |
| #define bswap_16(x) bswap16(x) |
| #define bswap_32(x) bswap32(x) |
| #define bswap_64(x) bswap64(x) |
| #define __BYTE_ORDER _BYTE_ORDER |
| #define __LITTLE_ENDIAN _LITTLE_ENDIAN |
| #define __BIG_ENDIAN _BIG_ENDIAN |
| |
| #elif defined(__OpenBSD__) |
| |
| #include <machine/endian.h> |
| #define bswap_16(x) swap16(x) |
| #define bswap_32(x) swap32(x) |
| #define bswap_64(x) swap64(x) |
| #define __BYTE_ORDER _BYTE_ORDER |
| #define __LITTLE_ENDIAN _LITTLE_ENDIAN |
| #define __BIG_ENDIAN _BIG_ENDIAN |
| |
| #elif defined(__sun) |
| |
| #include <sys/byteorder.h> |
| #define bswap_16(x) BSWAP_16(x) |
| #define bswap_32(x) BSWAP_32(x) |
| #define bswap_64(x) BSWAP_64(x) |
| #define __LITTLE_ENDIAN 1234 |
| #define __BIG_ENDIAN 4321 |
| #ifdef _LITTLE_ENDIAN |
| #define __BYTE_ORDER __LITTLE_ENDIAN |
| #else |
| #define __BYTE_ORDER __BIG_ENDIAN |
| #endif |
| |
| #else |
| #error Unknown platform |
| #endif |
| |
| #endif /* ifndef PLATFORM_H_INCLUDED */ |