summaryrefslogtreecommitdiff
path: root/ares_dns.h
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2005-11-14 23:14:54 +0000
committerDaniel Stenberg <daniel@haxx.se>2005-11-14 23:14:54 +0000
commit374bc69debc074fc67c187d24b52a394dc5f4656 (patch)
tree440a4803db3e8be6b5dffb54793c226f67837a87 /ares_dns.h
parent8e55d1b7a1fc35eb47de08591f330b68dcb3d3ab (diff)
downloadc-ares-374bc69debc074fc67c187d24b52a394dc5f4656.tar.gz
c-ares-374bc69debc074fc67c187d24b52a394dc5f4656.tar.bz2
c-ares-374bc69debc074fc67c187d24b52a394dc5f4656.zip
Detect big/little endian in the configure script and adjust the ares_dns.h
macros accordingly.
Diffstat (limited to 'ares_dns.h')
-rw-r--r--ares_dns.h19
1 files changed, 17 insertions, 2 deletions
diff --git a/ares_dns.h b/ares_dns.h
index 3e57572..290c8fb 100644
--- a/ares_dns.h
+++ b/ares_dns.h
@@ -18,7 +18,18 @@
#ifndef ARES__DNS_H
#define ARES__DNS_H
-#if 0
+#ifdef ARES_BIG_ENDIAN
+/* big-endian aware versions */
+#define DNS__16BIT(p) (((p)[1] << 8) | (p)[0])
+#define DNS__32BIT(p) (((p)[3] << 24) | ((p)[2] << 16) | \
+ ((p)[1] << 8) | (p)[0])
+#define DNS__SET16BIT(p, v) (((p)[1] = ((v) >> 8) & 0xff), \
+ ((p)[0] = (v) & 0xff))
+#define DNS__SET32BIT(p, v) (((p)[3] = ((v) >> 24) & 0xff), \
+ ((p)[2] = ((v) >> 16) & 0xff), \
+ ((p)[1] = ((v) >> 8) & 0xff), \
+ ((p)[0] = (v) & 0xff))
+#else
#define DNS__16BIT(p) (((p)[0] << 8) | (p)[1])
#define DNS__32BIT(p) (((p)[0] << 24) | ((p)[1] << 16) | \
((p)[2] << 8) | (p)[3])
@@ -28,7 +39,11 @@
((p)[1] = ((v) >> 16) & 0xff), \
((p)[2] = ((v) >> 8) & 0xff), \
((p)[3] = (v) & 0xff))
-#else /* big-endian aware versions */
+#endif
+
+#if 0
+/* we cannot use this approach on systems where we can't access 16/32 bit
+ data on un-aligned addresses */
#define DNS__16BIT(p) ntohs(*(unsigned short*)(p))
#define DNS__32BIT(p) ntohl(*(unsigned long*)(p))
#define DNS__SET16BIT(p, v) *(unsigned short*)(p) = htons(v)