[ovs-dev] [PATCH v5 2/4] lib: Adding explicit typecasts to fix C++ compilation issues

Shireesh Singh shireeshcse07 at gmail.com
Sat Dec 16 00:58:57 UTC 2017


C++ does not allow implicit conversion from void pointer to a specific
pointer type. This change adds explicit typecasts to appropriate types
wherever needed.

Signed-off-by: Shireesh Kumar Singh <shireeshkum at vmware.com>
Signed-off-by: Sairam Venugopal <vsairam at vmware.com>
Co-authored-by:  Sairam Venugopal <vsairam at vmware.com>
---
 lib/netlink.h     |  3 ++-
 lib/ovs-thread.h  |  4 ++--
 lib/packets.h     | 15 ++++++++++-----
 lib/socket-util.h |  4 ++--
 4 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/lib/netlink.h b/lib/netlink.h
index 6dfac27..e4cb2f7 100644
--- a/lib/netlink.h
+++ b/lib/netlink.h
@@ -153,7 +153,8 @@ enum nl_attr_type
 static inline struct nlattr *
 nl_attr_next(const struct nlattr *nla)
 {
-    return (void *) ((uint8_t *) nla + NLA_ALIGN(nla->nla_len));
+    return ALIGNED_CAST(struct nlattr *,
+                        ((uint8_t *) nla + NLA_ALIGN(nla->nla_len)));
 }
 
 static inline bool
diff --git a/lib/ovs-thread.h b/lib/ovs-thread.h
index 55e51a4..03fd804 100644
--- a/lib/ovs-thread.h
+++ b/lib/ovs-thread.h
@@ -260,7 +260,7 @@ void xpthread_join(pthread_t, void **);
     static inline NAME##_type *                                         \
     NAME##_get_unsafe(void)                                             \
     {                                                                   \
-        return &NAME##_var;                                             \
+        return (NAME##_type *)&NAME##_var;                              \
     }                                                                   \
                                                                         \
     static inline NAME##_type *                                         \
@@ -316,7 +316,7 @@ void xpthread_join(pthread_t, void **);
     static inline NAME##_type *                                         \
     NAME##_get_unsafe(void)                                             \
     {                                                                   \
-        return pthread_getspecific(NAME##_key);                         \
+        return (NAME##_type *)pthread_getspecific(NAME##_key);          \
     }                                                                   \
                                                                         \
     NAME##_type *NAME##_get(void);
diff --git a/lib/packets.h b/lib/packets.h
index 13ea46d..45e6345 100644
--- a/lib/packets.h
+++ b/lib/packets.h
@@ -1123,7 +1123,8 @@ in6_addr_set_mapped_ipv4(struct in6_addr *ip6, ovs_be32 ip4)
 static inline ovs_be32
 in6_addr_get_mapped_ipv4(const struct in6_addr *addr)
 {
-    union ovs_16aligned_in6_addr *taddr = (void *) addr;
+    union ovs_16aligned_in6_addr *taddr =
+        (union ovs_16aligned_in6_addr *) addr;
     if (IN6_IS_ADDR_V4MAPPED(addr)) {
         return get_16aligned_be32(&taddr->be32[3]);
     } else {
@@ -1134,7 +1135,8 @@ in6_addr_get_mapped_ipv4(const struct in6_addr *addr)
 static inline void
 in6_addr_solicited_node(struct in6_addr *addr, const struct in6_addr *ip6)
 {
-    union ovs_16aligned_in6_addr *taddr = (void *) addr;
+    union ovs_16aligned_in6_addr *taddr =
+        (union ovs_16aligned_in6_addr *) addr;
     memset(taddr->be16, 0, sizeof(taddr->be16));
     taddr->be16[0] = htons(0xff02);
     taddr->be16[5] = htons(0x1);
@@ -1150,8 +1152,10 @@ static inline void
 in6_generate_eui64(struct eth_addr ea, struct in6_addr *prefix,
                    struct in6_addr *lla)
 {
-    union ovs_16aligned_in6_addr *taddr = (void *) lla;
-    union ovs_16aligned_in6_addr *prefix_taddr = (void *) prefix;
+    union ovs_16aligned_in6_addr *taddr =
+        (union ovs_16aligned_in6_addr *) lla;
+    union ovs_16aligned_in6_addr *prefix_taddr =
+        (union ovs_16aligned_in6_addr *) prefix;
     taddr->be16[0] = prefix_taddr->be16[0];
     taddr->be16[1] = prefix_taddr->be16[1];
     taddr->be16[2] = prefix_taddr->be16[2];
@@ -1169,7 +1173,8 @@ in6_generate_eui64(struct eth_addr ea, struct in6_addr *prefix,
 static inline void
 in6_generate_lla(struct eth_addr ea, struct in6_addr *lla)
 {
-    union ovs_16aligned_in6_addr *taddr = (void *) lla;
+    union ovs_16aligned_in6_addr *taddr =
+        (union ovs_16aligned_in6_addr *) lla;
     memset(taddr->be16, 0, sizeof(taddr->be16));
     taddr->be16[0] = htons(0xfe80);
     taddr->be16[4] = htons(((ea.ea[0] ^ 0x02) << 8) | ea.ea[1]);
diff --git a/lib/socket-util.h b/lib/socket-util.h
index 873a59a..439f0c2 100644
--- a/lib/socket-util.h
+++ b/lib/socket-util.h
@@ -138,7 +138,7 @@ static inline int make_unix_socket(int style, bool nonblock,
 static inline int rpl_setsockopt(int sock, int level, int optname,
                                  const void *optval, socklen_t optlen)
 {
-    return (setsockopt)(sock, level, optname, optval, optlen);
+    return (setsockopt)(sock, level, optname, (const char *)optval, optlen);
 }
 
 #define getsockopt(sock, level, optname, optval, optlen) \
@@ -146,7 +146,7 @@ static inline int rpl_setsockopt(int sock, int level, int optname,
 static inline int rpl_getsockopt(int sock, int level, int optname,
                                  void *optval, socklen_t *optlen)
 {
-    return (getsockopt)(sock, level, optname, optval, optlen);
+    return (getsockopt)(sock, level, optname, (char *)optval, optlen);
 }
 #endif
 
-- 
2.7.4



More information about the dev mailing list