aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2006-05-06 08:03:24 +0000
committerUlrich Drepper <drepper@redhat.com>2006-05-06 08:03:24 +0000
commit697e162863c5e32a5de03688d47151851ab21eb9 (patch)
treeec41be6cad6a29041fcc56424352b7282815930f /include
parent[BZ #2499] (diff)
downloadglibc-697e162863c5e32a5de03688d47151851ab21eb9.tar.gz
glibc-697e162863c5e32a5de03688d47151851ab21eb9.tar.bz2
glibc-697e162863c5e32a5de03688d47151851ab21eb9.zip
* include/arpa/nameser.h: Add optimizations for NS_GET16 and NS_GET32.
* resolv/res_send.c (res_nameinquery): Use NS_GET16 directly instead of ns_get16. (res_queriesmatch): Likewise. Minor optimization.
Diffstat (limited to 'include')
-rw-r--r--include/arpa/nameser.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/include/arpa/nameser.h b/include/arpa/nameser.h
index 944fe732a6..09bd504754 100644
--- a/include/arpa/nameser.h
+++ b/include/arpa/nameser.h
@@ -1 +1,28 @@
#include <resolv/arpa/nameser.h>
+
+/* If the machine allows unaligned access we can do better than using
+ the NS_GET16, NS_GET32, NS_PUT16, and NS_PUT32 macros from the
+ installed header. */
+#include <string.h>
+#include <stdint.h>
+#include <netinet/in.h>
+
+#if _STRING_ARCH_unaligned
+
+# undef NS_GET16
+# define NS_GET16(s, cp) \
+ do { \
+ uint16_t *t_cp = (uint16_t *) (cp); \
+ (s) = ntohs (*t_cp); \
+ (cp) += NS_INT16SZ; \
+ } while (0)
+
+# undef NS_GET32
+# define NS_GET32(s, cp) \
+ do { \
+ uint32_t *t_cp = (uint32_t *) (cp); \
+ (s) = ntohl (*t_cp); \
+ (cp) += NS_INT32SZ; \
+ } while (0)
+
+#endif