This might have been a good idea 20 years ago but in this day and age
the compiler is probably better at unrolling loops.
OK?
diff --git engine.c engine.c
index 9f94bf177ff..330c2725ae0 100644
--- engine.c
+++ engine.c
@@ -1262,6 +1262,7 @@ gen_addr(struct slaacd_iface *iface, struct radv_prefix
*prefix, struct
SHA2_CTX ctx;
struct in6_addr iid;
int dad_counter = 0; /* XXX not used */
+ int i;
u_int8_t digest[SHA512_DIGEST_LENGTH];
memset(&iid, 0, sizeof(iid));
@@ -1280,14 +1281,9 @@ gen_addr(struct slaacd_iface *iface, struct radv_prefix
*prefix, struct
memcpy(&addr_proposal->addr.sin6_addr, &prefix->prefix,
sizeof(addr_proposal->addr.sin6_addr));
- addr_proposal->addr.sin6_addr.s6_addr32[0] &=
- addr_proposal->mask.s6_addr32[0];
- addr_proposal->addr.sin6_addr.s6_addr32[1] &=
- addr_proposal->mask.s6_addr32[1];
- addr_proposal->addr.sin6_addr.s6_addr32[2] &=
- addr_proposal->mask.s6_addr32[2];
- addr_proposal->addr.sin6_addr.s6_addr32[3] &=
- addr_proposal->mask.s6_addr32[3];
+ for (i=0; i < 4; i++)
+ addr_proposal->addr.sin6_addr.s6_addr32[i] &=
+ addr_proposal->mask.s6_addr32[i];
if (privacy) {
arc4random_buf(&iid.s6_addr, sizeof(iid.s6_addr));
@@ -1310,14 +1306,9 @@ gen_addr(struct slaacd_iface *iface, struct radv_prefix
*prefix, struct
sizeof(iid.s6_addr));
}
- addr_proposal->addr.sin6_addr.s6_addr32[0] |=
- (iid.s6_addr32[0] & ~addr_proposal->mask.s6_addr32[0]);
- addr_proposal->addr.sin6_addr.s6_addr32[1] |=
- (iid.s6_addr32[1] & ~addr_proposal->mask.s6_addr32[1]);
- addr_proposal->addr.sin6_addr.s6_addr32[2] |=
- (iid.s6_addr32[2] & ~addr_proposal->mask.s6_addr32[2]);
- addr_proposal->addr.sin6_addr.s6_addr32[3] |=
- (iid.s6_addr32[3] & ~addr_proposal->mask.s6_addr32[3]);
+ for (i=0; i < 4; i++)
+ addr_proposal->addr.sin6_addr.s6_addr32[i] |=
+ (iid.s6_addr32[i] & ~addr_proposal->mask.s6_addr32[i]);
#undef s6_addr32
}
--
I'm not entirely sure you are real.