Add fallback definitions to <isc/endian.h>
Since the hto[bl]e{16,32,64}() and [bl]e{16,32,64}toh() conversion
functions are nonstandard, add fallback definitions of these functions
to <isc/endian.h>, so that their unavailability does not prevent
compilation from succeeding.
This commit is contained in:
committed by
Michał Kępień
parent
7ab1fb2a8d
commit
85059c2937
@@ -85,6 +85,90 @@
|
||||
|
||||
#else
|
||||
|
||||
#error Platform not supported
|
||||
#endif /* Specific platform support */
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Fallback definitions.
|
||||
*/
|
||||
|
||||
#include <inttypes.h>
|
||||
|
||||
#ifndef bswap_16
|
||||
# define bswap_16(x) \
|
||||
((uint16_t)((((uint16_t) (x) & 0xff00) >> 8) | \
|
||||
(((uint16_t) (x) & 0x00ff) << 8)))
|
||||
#endif /* !bswap_16 */
|
||||
|
||||
#ifndef bswap_32
|
||||
# define bswap_32(x) \
|
||||
((uint32_t)((((uint32_t) (x) & 0xff000000) >> 24) | \
|
||||
(((uint32_t) (x) & 0x00ff0000) >> 8) | \
|
||||
(((uint32_t) (x) & 0x0000ff00) << 8) | \
|
||||
(((uint32_t) (x) & 0x000000ff) << 24)))
|
||||
#endif /* !bswap_32 */
|
||||
|
||||
#ifndef bswap_64
|
||||
# define bswap_64(x) \
|
||||
((uint64_t)((((uint64_t) (x) & 0xff00000000000000ULL) >> 56) | \
|
||||
(((uint64_t) (x) & 0x00ff000000000000ULL) >> 40) | \
|
||||
(((uint64_t) (x) & 0x0000ff0000000000ULL) >> 24) | \
|
||||
(((uint64_t) (x) & 0x000000ff00000000ULL) >> 8) | \
|
||||
(((uint64_t) (x) & 0x00000000ff000000ULL) << 8) | \
|
||||
(((uint64_t) (x) & 0x0000000000ff0000ULL) << 24) | \
|
||||
(((uint64_t) (x) & 0x000000000000ff00ULL) << 40) | \
|
||||
(((uint64_t) (x) & 0x00000000000000ffULL) << 56)))
|
||||
#endif /* !bswap_64 */
|
||||
|
||||
#ifndef htobe16
|
||||
# if WORDS_BIGENDIAN
|
||||
|
||||
# define htobe16(x) (x)
|
||||
# define htole16(x) bswap_16(x)
|
||||
# define be16toh(x) (x)
|
||||
# define le16toh(x) bswap_16(x)
|
||||
|
||||
# else /* WORDS_BIGENDIAN */
|
||||
|
||||
# define htobe16(x) bswap_16(x)
|
||||
# define htole16(x) (x)
|
||||
# define be16toh(x) bswap_16(x)
|
||||
# define le16toh(x) (x)
|
||||
|
||||
# endif /* WORDS_BIGENDIAN */
|
||||
#endif /* !htobe16 */
|
||||
|
||||
#ifndef htobe32
|
||||
# if WORDS_BIGENDIAN
|
||||
|
||||
# define htobe32(x) (x)
|
||||
# define htole32(x) bswap_32(x)
|
||||
# define be32toh(x) (x)
|
||||
# define le32toh(x) bswap_32(x)
|
||||
|
||||
# else /* WORDS_BIGENDIAN */
|
||||
|
||||
# define htobe32(x) bswap_32(x)
|
||||
# define htole32(x) (x)
|
||||
# define be32toh(x) bswap_32(x)
|
||||
# define le32toh(x) (x)
|
||||
|
||||
# endif /* WORDS_BIGENDIAN */
|
||||
#endif /* !htobe32 */
|
||||
|
||||
#ifndef htobe64
|
||||
# if WORDS_BIGENDIAN
|
||||
|
||||
# define htobe64(x) (x)
|
||||
# define htole64(x) bswap_64(x)
|
||||
# define be64toh(x) (x)
|
||||
# define le64toh(x) bswap_64(x)
|
||||
|
||||
#else /* WORDS_BIGENDIAN */
|
||||
|
||||
# define htobe64(x) bswap_64(x)
|
||||
# define htole64(x) (x)
|
||||
# define be64toh(x) bswap_64(x)
|
||||
# define le64toh(x) (x)
|
||||
|
||||
# endif /* WORDS_BIGENDIAN */
|
||||
#endif /* !htobe64 */
|
||||
|
||||
Reference in New Issue
Block a user