111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/*- 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1997 Niklas Hallqvist. All rights reserved. 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Redistribution and use in source and binary forms, with or without 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * modification, are permitted provided that the following conditions 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * are met: 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1. Redistributions of source code must retain the above copyright 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * notice, this list of conditions and the following disclaimer. 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 2. Redistributions in binary form must reproduce the above copyright 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * notice, this list of conditions and the following disclaimer in the 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * documentation and/or other materials provided with the distribution. 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _SYS_ENDIAN_H_ 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SYS_ENDIAN_H_ 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <sys/cdefs.h> 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <stdint.h> 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _LITTLE_ENDIAN 1234 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _BIG_ENDIAN 4321 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _PDP_ENDIAN 3412 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _BYTE_ORDER _LITTLE_ENDIAN 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define __LITTLE_ENDIAN_BITFIELD 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef __LITTLE_ENDIAN 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define __LITTLE_ENDIAN _LITTLE_ENDIAN 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef __BIG_ENDIAN 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define __BIG_ENDIAN _BIG_ENDIAN 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define __BYTE_ORDER _BYTE_ORDER 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define __swap16 __builtin_bswap16 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define __swap32 __builtin_bswap32 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define __swap64 __builtin_bswap64 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* glibc compatibility. */ 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__BEGIN_DECLS 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertuint32_t htonl(uint32_t) __pure2; 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertuint16_t htons(uint16_t) __pure2; 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertuint32_t ntohl(uint32_t) __pure2; 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertuint16_t ntohs(uint16_t) __pure2; 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__END_DECLS 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define htonl(x) __swap32(x) 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define htons(x) __swap16(x) 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ntohl(x) __swap32(x) 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ntohs(x) __swap16(x) 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Bionic additions */ 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define htonq(x) __swap64(x) 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ntohq(x) __swap64(x) 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if __BSD_VISIBLE 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define LITTLE_ENDIAN _LITTLE_ENDIAN 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define BIG_ENDIAN _BIG_ENDIAN 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PDP_ENDIAN _PDP_ENDIAN 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define BYTE_ORDER _BYTE_ORDER 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NTOHL(x) (x) = ntohl((u_int32_t)(x)) 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NTOHS(x) (x) = ntohs((u_int16_t)(x)) 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define HTONL(x) (x) = htonl((u_int32_t)(x)) 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define HTONS(x) (x) = htons((u_int16_t)(x)) 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define htobe16 __swap16 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define htobe32 __swap32 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define htobe64 __swap64 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define betoh16 __swap16 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define betoh32 __swap32 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define betoh64 __swap64 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define htole16(x) (x) 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define htole32(x) (x) 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define htole64(x) (x) 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define letoh16(x) (x) 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define letoh32(x) (x) 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define letoh64(x) (x) 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * glibc-compatible beXXtoh/leXXtoh synonyms for htobeXX/htoleXX. 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * The BSDs export both sets of names, bionic historically only 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * exported the ones above (or on the rhs here), and glibc only 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * exports these names (on the lhs). 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define be16toh(x) htobe16(x) 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define be32toh(x) htobe32(x) 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define be64toh(x) htobe64(x) 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define le16toh(x) htole16(x) 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define le32toh(x) htole32(x) 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define le64toh(x) htole64(x) 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* __BSD_VISIBLE */ 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _SYS_ENDIAN_H_ */ 107