summaryrefslogtreecommitdiff
path: root/gruel/src/include
diff options
context:
space:
mode:
Diffstat (limited to 'gruel/src/include')
-rw-r--r--gruel/src/include/gruel/inet.h.in31
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 */