diff options
author | Daniel Stenberg <daniel@haxx.se> | 2005-11-14 23:14:54 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2005-11-14 23:14:54 +0000 |
commit | 374bc69debc074fc67c187d24b52a394dc5f4656 (patch) | |
tree | 440a4803db3e8be6b5dffb54793c226f67837a87 /ares_dns.h | |
parent | 8e55d1b7a1fc35eb47de08591f330b68dcb3d3ab (diff) | |
download | c-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.h | 19 |
1 files changed, 17 insertions, 2 deletions
@@ -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) |