diff options
author | Rich Felker <dalias@aerifal.cx> | 2019-10-17 16:26:22 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2019-10-17 16:26:22 -0400 |
commit | 316730cdc7a330cddf288b4e5c1de5daa64e19f4 (patch) | |
tree | 53b9a5782fbcbb40962ee46e09734038c69958f7 | |
parent | 4d3a162d001a93edd285fb6603a883c30ae553ba (diff) | |
download | musl-316730cdc7a330cddf288b4e5c1de5daa64e19f4.tar.gz musl-316730cdc7a330cddf288b4e5c1de5daa64e19f4.tar.xz musl-316730cdc7a330cddf288b4e5c1de5daa64e19f4.zip |
make endian.h expose unprefixed macros, functions in standard profile
the resolution of Austin Group issue #162 adds endian.h as a standard header for future versions of the standard, making it no longer acceptable for some of the functionality to be hidden behind _BSD_SOURCE or _GNU_SOURCE. the definitions of the [lb]etoh{16,32,64} function-like macros are kept conditional since they are alternate names which the standard did not adopt.
-rw-r--r-- | include/endian.h | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/include/endian.h b/include/endian.h index 2c2ad5f4..172c4320 100644 --- a/include/endian.h +++ b/include/endian.h @@ -3,19 +3,19 @@ #include <features.h> -#define __PDP_ENDIAN 3412 +#define __NEED_uint16_t +#define __NEED_uint32_t +#define __NEED_uint64_t #include <bits/alltypes.h> -#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define __PDP_ENDIAN 3412 #define BIG_ENDIAN __BIG_ENDIAN #define LITTLE_ENDIAN __LITTLE_ENDIAN #define PDP_ENDIAN __PDP_ENDIAN #define BYTE_ORDER __BYTE_ORDER -#include <stdint.h> - static __inline uint16_t __bswap16(uint16_t __x) { return __x<<8 | __x>>8; @@ -34,43 +34,47 @@ static __inline uint64_t __bswap64(uint64_t __x) #if __BYTE_ORDER == __LITTLE_ENDIAN #define htobe16(x) __bswap16(x) #define be16toh(x) __bswap16(x) -#define betoh16(x) __bswap16(x) #define htobe32(x) __bswap32(x) #define be32toh(x) __bswap32(x) -#define betoh32(x) __bswap32(x) #define htobe64(x) __bswap64(x) #define be64toh(x) __bswap64(x) -#define betoh64(x) __bswap64(x) #define htole16(x) (uint16_t)(x) #define le16toh(x) (uint16_t)(x) -#define letoh16(x) (uint16_t)(x) #define htole32(x) (uint32_t)(x) #define le32toh(x) (uint32_t)(x) -#define letoh32(x) (uint32_t)(x) #define htole64(x) (uint64_t)(x) #define le64toh(x) (uint64_t)(x) -#define letoh64(x) (uint64_t)(x) #else #define htobe16(x) (uint16_t)(x) #define be16toh(x) (uint16_t)(x) -#define betoh16(x) (uint16_t)(x) #define htobe32(x) (uint32_t)(x) #define be32toh(x) (uint32_t)(x) -#define betoh32(x) (uint32_t)(x) #define htobe64(x) (uint64_t)(x) #define be64toh(x) (uint64_t)(x) -#define betoh64(x) (uint64_t)(x) #define htole16(x) __bswap16(x) #define le16toh(x) __bswap16(x) -#define letoh16(x) __bswap16(x) #define htole32(x) __bswap32(x) #define le32toh(x) __bswap32(x) -#define letoh32(x) __bswap32(x) #define htole64(x) __bswap64(x) #define le64toh(x) __bswap64(x) -#define letoh64(x) __bswap64(x) #endif +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#if __BYTE_ORDER == __LITTLE_ENDIAN +#define betoh16(x) __bswap16(x) +#define betoh32(x) __bswap32(x) +#define betoh64(x) __bswap64(x) +#define letoh16(x) (uint16_t)(x) +#define letoh32(x) (uint32_t)(x) +#define letoh64(x) (uint64_t)(x) +#else +#define betoh16(x) (uint16_t)(x) +#define betoh32(x) (uint32_t)(x) +#define betoh64(x) (uint64_t)(x) +#define letoh16(x) __bswap16(x) +#define letoh32(x) __bswap32(x) +#define letoh64(x) __bswap64(x) +#endif #endif #endif |