summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2012-05-11 11:05:41 -0400
committerRich Felker <dalias@aerifal.cx>2012-05-11 11:05:41 -0400
commitb47fdcdef8e88452914636ce23ee6792f259b5dc (patch)
tree0d0ced584b1c7a262cabe85f347379e4d3f63578
parente700e59a90290babdb7e984a7a738f30a8f87dcf (diff)
downloadmusl-b47fdcdef8e88452914636ce23ee6792f259b5dc.tar.gz
add missing IN6_ARE_ADDR_EQUAL
written to avoid multiple conditional jumps and avoid ugly repetitive lines in the header file.
-rw-r--r--include/netinet/in.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/include/netinet/in.h b/include/netinet/in.h
index 181f890c..509640b8 100644
--- a/include/netinet/in.h
+++ b/include/netinet/in.h
@@ -138,6 +138,11 @@ uint16_t ntohs(uint16_t);
#define IN6_IS_ADDR_MC_GLOBAL(a) \
(IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0xe))
+#define __ARE_4_EQUAL(a,b) \
+ (!( 0[a]-0[b] | 1[a]-1[b] | 2[a]-2[b] | 3[a]-3[b] ))
+#define IN6_ARE_ADDR_EQUAL(a,b) \
+ __ARE_4_EQUAL((const uint32_t *)(a), (const uint32_t *)(b))
+
#define IN_CLASSA(a) ((((in_addr_t)(a)) & 0x80000000) == 0)
#define IN_CLASSA_NET 0xff000000
#define IN_CLASSA_NSHIFT 24