android: fix type punning warning
authorFerry Huberts <ferry.huberts@pelagic.nl>
Tue, 23 Oct 2012 14:11:42 +0000 (16:11 +0200)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Tue, 23 Oct 2012 17:20:01 +0000 (19:20 +0200)
Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
src/ipcalc.h

index 30b8068..ca858a8 100644 (file)
@@ -163,7 +163,16 @@ sockaddr4_to_string(struct ipaddr_str *const buf, const struct sockaddr *const a
 
 static INLINE bool
 is_prefix_niit_ipv6(const struct olsr_ip_prefix *p) {
 
 static INLINE bool
 is_prefix_niit_ipv6(const struct olsr_ip_prefix *p) {
-  return olsr_cnf->ip_version == AF_INET6 && IN6_IS_ADDR_V4MAPPED(&p->prefix.v6)
+#ifdef __ANDROID__
+  #define IN6_IS_ADDR_V4MAPPED_ANDROID_WORKAROUND(a) \
+       ((((__const uint32_t *) (a))[0] == 0)                                 \
+        && (((__const uint32_t *) (a))[1] == 0)                              \
+        && (((__const uint32_t *) (a))[2] == htonl (0xffff)))
+       bool v4mapped = IN6_IS_ADDR_V4MAPPED_ANDROID_WORKAROUND(&p->prefix.v6);
+#else
+       bool v4mapped = IN6_IS_ADDR_V4MAPPED(&p->prefix.v6);
+#endif
+  return olsr_cnf->ip_version == AF_INET6 && v4mapped
       && p->prefix_len >= ipv6_mappedv4_route.prefix_len;
 }
 
       && p->prefix_len >= ipv6_mappedv4_route.prefix_len;
 }