1*8d67ca89SAndroid Build Coastguard Worker /*- 2*8d67ca89SAndroid Build Coastguard Worker * Copyright (c) 1997 Niklas Hallqvist. All rights reserved. 3*8d67ca89SAndroid Build Coastguard Worker * 4*8d67ca89SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 5*8d67ca89SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 6*8d67ca89SAndroid Build Coastguard Worker * are met: 7*8d67ca89SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 8*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 9*8d67ca89SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 10*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 11*8d67ca89SAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 12*8d67ca89SAndroid Build Coastguard Worker * 13*8d67ca89SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 14*8d67ca89SAndroid Build Coastguard Worker * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 15*8d67ca89SAndroid Build Coastguard Worker * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 16*8d67ca89SAndroid Build Coastguard Worker * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 17*8d67ca89SAndroid Build Coastguard Worker * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 18*8d67ca89SAndroid Build Coastguard Worker * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 19*8d67ca89SAndroid Build Coastguard Worker * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 20*8d67ca89SAndroid Build Coastguard Worker * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21*8d67ca89SAndroid Build Coastguard Worker * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 22*8d67ca89SAndroid Build Coastguard Worker * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23*8d67ca89SAndroid Build Coastguard Worker */ 24*8d67ca89SAndroid Build Coastguard Worker 25*8d67ca89SAndroid Build Coastguard Worker #ifndef _SYS_ENDIAN_H_ 26*8d67ca89SAndroid Build Coastguard Worker #define _SYS_ENDIAN_H_ 27*8d67ca89SAndroid Build Coastguard Worker 28*8d67ca89SAndroid Build Coastguard Worker #include <sys/cdefs.h> 29*8d67ca89SAndroid Build Coastguard Worker 30*8d67ca89SAndroid Build Coastguard Worker #include <stdint.h> 31*8d67ca89SAndroid Build Coastguard Worker 32*8d67ca89SAndroid Build Coastguard Worker #define _LITTLE_ENDIAN 1234 33*8d67ca89SAndroid Build Coastguard Worker #define _BIG_ENDIAN 4321 34*8d67ca89SAndroid Build Coastguard Worker #define _PDP_ENDIAN 3412 35*8d67ca89SAndroid Build Coastguard Worker #define _BYTE_ORDER _LITTLE_ENDIAN 36*8d67ca89SAndroid Build Coastguard Worker #define __LITTLE_ENDIAN_BITFIELD 37*8d67ca89SAndroid Build Coastguard Worker 38*8d67ca89SAndroid Build Coastguard Worker #ifndef __LITTLE_ENDIAN 39*8d67ca89SAndroid Build Coastguard Worker #define __LITTLE_ENDIAN _LITTLE_ENDIAN 40*8d67ca89SAndroid Build Coastguard Worker #endif 41*8d67ca89SAndroid Build Coastguard Worker #ifndef __BIG_ENDIAN 42*8d67ca89SAndroid Build Coastguard Worker #define __BIG_ENDIAN _BIG_ENDIAN 43*8d67ca89SAndroid Build Coastguard Worker #endif 44*8d67ca89SAndroid Build Coastguard Worker #define __BYTE_ORDER _BYTE_ORDER 45*8d67ca89SAndroid Build Coastguard Worker 46*8d67ca89SAndroid Build Coastguard Worker #define __swap16 __builtin_bswap16 47*8d67ca89SAndroid Build Coastguard Worker #define __swap32 __builtin_bswap32 48*8d67ca89SAndroid Build Coastguard Worker #define __swap64(x) __BIONIC_CAST(static_cast,uint64_t,__builtin_bswap64(x)) 49*8d67ca89SAndroid Build Coastguard Worker 50*8d67ca89SAndroid Build Coastguard Worker /* glibc compatibility. */ 51*8d67ca89SAndroid Build Coastguard Worker __BEGIN_DECLS 52*8d67ca89SAndroid Build Coastguard Worker uint32_t htonl(uint32_t __x) __attribute_const__; 53*8d67ca89SAndroid Build Coastguard Worker uint16_t htons(uint16_t __x) __attribute_const__; 54*8d67ca89SAndroid Build Coastguard Worker uint32_t ntohl(uint32_t __x) __attribute_const__; 55*8d67ca89SAndroid Build Coastguard Worker uint16_t ntohs(uint16_t __x) __attribute_const__; 56*8d67ca89SAndroid Build Coastguard Worker __END_DECLS 57*8d67ca89SAndroid Build Coastguard Worker 58*8d67ca89SAndroid Build Coastguard Worker #define htonl(x) __swap32(x) 59*8d67ca89SAndroid Build Coastguard Worker #define htons(x) __swap16(x) 60*8d67ca89SAndroid Build Coastguard Worker #define ntohl(x) __swap32(x) 61*8d67ca89SAndroid Build Coastguard Worker #define ntohs(x) __swap16(x) 62*8d67ca89SAndroid Build Coastguard Worker 63*8d67ca89SAndroid Build Coastguard Worker /* Bionic additions */ 64*8d67ca89SAndroid Build Coastguard Worker #define htonq(x) __swap64(x) 65*8d67ca89SAndroid Build Coastguard Worker #define ntohq(x) __swap64(x) 66*8d67ca89SAndroid Build Coastguard Worker 67*8d67ca89SAndroid Build Coastguard Worker #if defined(__USE_BSD) || defined(__BIONIC__) /* Historically bionic exposed these. */ 68*8d67ca89SAndroid Build Coastguard Worker #define LITTLE_ENDIAN _LITTLE_ENDIAN 69*8d67ca89SAndroid Build Coastguard Worker #define BIG_ENDIAN _BIG_ENDIAN 70*8d67ca89SAndroid Build Coastguard Worker #define PDP_ENDIAN _PDP_ENDIAN 71*8d67ca89SAndroid Build Coastguard Worker #define BYTE_ORDER _BYTE_ORDER 72*8d67ca89SAndroid Build Coastguard Worker 73*8d67ca89SAndroid Build Coastguard Worker #define NTOHL(x) (x) = ntohl(__BIONIC_CAST(static_cast,u_int32_t,(x))) 74*8d67ca89SAndroid Build Coastguard Worker #define NTOHS(x) (x) = ntohs(__BIONIC_CAST(static_cast,u_int16_t,(x))) 75*8d67ca89SAndroid Build Coastguard Worker #define HTONL(x) (x) = htonl(__BIONIC_CAST(static_cast,u_int32_t,(x))) 76*8d67ca89SAndroid Build Coastguard Worker #define HTONS(x) (x) = htons(__BIONIC_CAST(static_cast,u_int16_t,(x))) 77*8d67ca89SAndroid Build Coastguard Worker 78*8d67ca89SAndroid Build Coastguard Worker #define htobe16(x) __swap16(x) 79*8d67ca89SAndroid Build Coastguard Worker #define htobe32(x) __swap32(x) 80*8d67ca89SAndroid Build Coastguard Worker #define htobe64(x) __swap64(x) 81*8d67ca89SAndroid Build Coastguard Worker #define betoh16(x) __swap16(x) 82*8d67ca89SAndroid Build Coastguard Worker #define betoh32(x) __swap32(x) 83*8d67ca89SAndroid Build Coastguard Worker #define betoh64(x) __swap64(x) 84*8d67ca89SAndroid Build Coastguard Worker 85*8d67ca89SAndroid Build Coastguard Worker #define htole16(x) (x) 86*8d67ca89SAndroid Build Coastguard Worker #define htole32(x) (x) 87*8d67ca89SAndroid Build Coastguard Worker #define htole64(x) (x) 88*8d67ca89SAndroid Build Coastguard Worker #define letoh16(x) (x) 89*8d67ca89SAndroid Build Coastguard Worker #define letoh32(x) (x) 90*8d67ca89SAndroid Build Coastguard Worker #define letoh64(x) (x) 91*8d67ca89SAndroid Build Coastguard Worker 92*8d67ca89SAndroid Build Coastguard Worker /* 93*8d67ca89SAndroid Build Coastguard Worker * glibc-compatible beXXtoh/leXXtoh synonyms for htobeXX/htoleXX. 94*8d67ca89SAndroid Build Coastguard Worker * The BSDs export both sets of names, bionic historically only 95*8d67ca89SAndroid Build Coastguard Worker * exported the ones above (or on the rhs here), and glibc only 96*8d67ca89SAndroid Build Coastguard Worker * exports these names (on the lhs). 97*8d67ca89SAndroid Build Coastguard Worker */ 98*8d67ca89SAndroid Build Coastguard Worker #define be16toh(x) htobe16(x) 99*8d67ca89SAndroid Build Coastguard Worker #define be32toh(x) htobe32(x) 100*8d67ca89SAndroid Build Coastguard Worker #define be64toh(x) htobe64(x) 101*8d67ca89SAndroid Build Coastguard Worker #define le16toh(x) htole16(x) 102*8d67ca89SAndroid Build Coastguard Worker #define le32toh(x) htole32(x) 103*8d67ca89SAndroid Build Coastguard Worker #define le64toh(x) htole64(x) 104*8d67ca89SAndroid Build Coastguard Worker 105*8d67ca89SAndroid Build Coastguard Worker #endif 106*8d67ca89SAndroid Build Coastguard Worker 107*8d67ca89SAndroid Build Coastguard Worker #endif 108