about summary refs log tree commit diff
path: root/include
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
parentacf82eaf270b410e49dfe45fa836f1ba41b62bb6 (diff)
downloadglibc-697e162863c5e32a5de03688d47151851ab21eb9.tar.gz
glibc-697e162863c5e32a5de03688d47151851ab21eb9.tar.xz
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