diff options
Diffstat (limited to 'gruel/src/include')
-rw-r--r-- | gruel/src/include/gruel/inet.h.in | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/gruel/src/include/gruel/inet.h.in b/gruel/src/include/gruel/inet.h.in index a98d83e9c..320270727 100644 --- a/gruel/src/include/gruel/inet.h.in +++ b/gruel/src/include/gruel/inet.h.in @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2008 Free Software Foundation, Inc. + * Copyright 2008, 2009 Free Software Foundation, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,6 +19,33 @@ #ifndef INCLUDED_INET_H #define INCLUDED_INET_H +#if 1 /* missing htonll or ntohll */ +#if @GR_ARCH_BIGENDIAN@ /* GR_ARCH_BIGENDIAN */ +// Nothing to do... +static inline uint64_t htonll(uint64_t x){ return x;} +static inline uint64_t ntohll(uint64_t x){ return x;} +#else +#if @GR_HAVE_BYTESWAP@ /* GR_HAVE_BYTESWAP */ +#include <byteswap.h> +#else + +static inline uint64_t +bswap_64(uint64_t x) +{ + return ((x & 0x00000000000000ffull) << 56) | ((x & 0x000000000000ff00ull) << 40) | + ((x & 0x0000000000ff0000ull) << 24) | ((x & 0x00000000ff000000ull) << 8) | + ((x & 0x000000ff00000000ull) >> 8) | ((x & 0x0000ff0000000000ull) >> 24) | + ((x & 0x00ff000000000000ull) >> 40) | ((x & 0xff00000000000000ull) >> 56); +} + +#endif /* GR_HAVE_BYTESWAP */ + +static inline uint64_t htonll(uint64_t x){ return bswap_64(x);} +static inline uint64_t ntohll(uint64_t x){ return bswap_64(x);} + +#endif /* GR_ARCH_BIGENDIAN */ +#endif /* missing htonll or ntohll */ + #if @GR_HAVE_ARPA_INET@ /* GR_HAVE_ARPA_INET */ #include <arpa/inet.h> #elif @GR_HAVE_NETINET_IN@ /* GR_HAVE_NETINET_IN */ @@ -61,8 +88,10 @@ static inline uint16_t ntohs(uint16_t x){ return bswap_16(x); } static inline uint8_t ntohx(uint8_t x){ return x; } static inline uint16_t ntohx(uint16_t x){ return ntohs(x); } static inline uint32_t ntohx(uint32_t x){ return ntohl(x); } +static inline uint64_t ntohx(uint64_t x){ return ntohll(x);} static inline uint8_t htonx(uint8_t x){ return x; } static inline uint16_t htonx(uint16_t x){ return htons(x); } static inline uint32_t htonx(uint32_t x){ return htonl(x); } +static inline uint64_t htonx(uint64_t x){ return htonll(x);} #endif /* INCLUDED_INET_H */ |