]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add fallback definitions to <isc/endian.h>
authorOndřej Surý <ondrej@sury.org>
Mon, 3 Jun 2019 12:13:23 +0000 (14:13 +0200)
committerMichał Kępień <michal@isc.org>
Mon, 3 Jun 2019 12:13:23 +0000 (14:13 +0200)
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.

lib/isc/include/isc/endian.h

index f713cec02557f8821b3d8a490aad2b85217bf9b1..1e4433e4acc9636f83d9c9900a89498d002c5042 100644 (file)
 
 #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 */