From 66aaa6f573df2b2f0b8b96a84a16128863a01e1c Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Sat, 18 Feb 2012 12:15:22 +0100 Subject: misc: Improve byte swapping of ntohll(). Fixes sparse warnings. --- src/misc.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/misc.c b/src/misc.c index 6b051dbc..32884e62 100644 --- a/src/misc.c +++ b/src/misc.c @@ -288,12 +288,14 @@ uint64_t ntohll(uint64_t a) { #ifdef WORDS_BIGENDIAN return a; #else /* WORDS_BIGENDIAN */ - uint32_t low = (uint32_t)(a & 0xffffffff); - uint32_t high = (uint32_t)(a >> 32); - low = ntohl(low); - high = ntohl(high); - - return ((((uint64_t) low) << 32) | ( high)); + return (((uint64_t)(a) << 56) | \ + (((uint64_t)(a) << 40) & 0xff000000000000ULL) | \ + (((uint64_t)(a) << 24) & 0xff0000000000ULL) | \ + (((uint64_t)(a) << 8) & 0xff00000000ULL) | \ + (((uint64_t)(a) >> 8) & 0xff000000ULL) | \ + (((uint64_t)(a) >> 24) & 0xff0000ULL) | \ + (((uint64_t)(a) >> 40) & 0xff00ULL) | \ + ((uint64_t)(a) >> 56)); #endif /* WORDS_BIGENDIAN */ } #endif /* HAVE_NTOHLL */ -- cgit