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