From 890f917d8e907420f884a8d45af734575e13037c Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Thu, 9 Nov 2017 16:42:22 +0100 Subject: [PATCH] libcollectdclient/network_parse.c: Implement be{16,64}toh() if not provided by the system. --- src/libcollectdclient/network_parse.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/libcollectdclient/network_parse.c b/src/libcollectdclient/network_parse.c index d158b937..2365ab0a 100644 --- a/src/libcollectdclient/network_parse.c +++ b/src/libcollectdclient/network_parse.c @@ -43,10 +43,23 @@ #include #elif HAVE_SYS_ENDIAN_H #include -#elif defined(_AIX) && defined(__GNUC__) -/* AIX is always big endian */ -#define be16toh(x) (x) -#define be64toh(x) (x) +#else /* fallback */ +__attribute__((const)) static uint16_t be16toh(uint16_t n) { + uint8_t tmp[2]; + memmove(tmp, &n, sizeof(tmp)); + + return ((uint16_t)tmp[0] << 8) | ((uint16_t)tmp[1] << 0); +} + +__attribute__((const)) static uint64_t be64toh(uint64_t n) { + uint8_t tmp[8]; + memmove(tmp, &n, sizeof(tmp)); + + return ((uint64_t)tmp[0] << 56) | ((uint64_t)tmp[1] << 48) | + ((uint64_t)tmp[2] << 40) | ((uint64_t)tmp[3] << 32) | + ((uint64_t)tmp[4] << 24) | ((uint64_t)tmp[5] << 16) | + ((uint64_t)tmp[6] << 8) | ((uint64_t)tmp[7] << 0); +} #endif #if HAVE_GCRYPT_H -- 2.11.0