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