xref: /aosp_15_r20/bionic/libc/include/sys/endian.h (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
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