Adding an integer to a void pointer works fine with gcc but not with MSVC.
Hence convert the expressions that add an integer to a void pointer into
a construct that is standard C.
---
 snmplib/transports/snmpIPXDomain.c      | 16 ++++++++++------
 snmplib/transports/snmpIPv4BaseDomain.c | 12 ++++++++----
 snmplib/transports/snmpIPv6BaseDomain.c | 12 ++++++++----
 3 files changed, 26 insertions(+), 14 deletions(-)

diff --git a/snmplib/transports/snmpIPXDomain.c 
b/snmplib/transports/snmpIPXDomain.c
index 55070476ce1e..f5753f5a788a 100644
--- a/snmplib/transports/snmpIPXDomain.c
+++ b/snmplib/transports/snmpIPXDomain.c
@@ -78,9 +78,11 @@ static void netsnmp_ipx_get_taddr(struct netsnmp_transport_s 
*t,
     netsnmp_assert(t->remote_length == sizeof(*sa));
     *addr_len = 12;
     if ((*addr = malloc(*addr_len))) {
-        memcpy(*addr + 0,  &sa->sipx_network, 4);
-        memcpy(*addr + 4,  &sa->sipx_node,    6);
-        memcpy(*addr + 10, &sa->sipx_port,    2);
+        unsigned char *p = *addr;
+
+        memcpy(p + 0,  &sa->sipx_network, 4);
+        memcpy(p + 4,  &sa->sipx_node,    6);
+        memcpy(p + 10, &sa->sipx_port,    2);
     }
 }
 
@@ -447,14 +449,16 @@ netsnmp_ipx_create_tstring(const char *str, int local,
 static int netsnmp_ipx_ostring_to_sockaddr(struct sockaddr_ipx *sa,
                                            const void *o, size_t o_len)
 {
+    const char *p = o;
+
     if (o_len != 12)
         return 0;
 
     memset(sa, 0, sizeof(*sa));
     sa->sipx_family = AF_IPX;
-    memcpy(&sa->sipx_network, o + 0, 4);
-    memcpy(&sa->sipx_node,    o + 4, 6);
-    memcpy(&sa->sipx_port,    o + 10, 2);
+    memcpy(&sa->sipx_network, p + 0, 4);
+    memcpy(&sa->sipx_node,    p + 4, 6);
+    memcpy(&sa->sipx_port,    p + 10, 2);
     return 1;
 }
 
diff --git a/snmplib/transports/snmpIPv4BaseDomain.c 
b/snmplib/transports/snmpIPv4BaseDomain.c
index fafc1ab8045c..37ef72d4ed42 100644
--- a/snmplib/transports/snmpIPv4BaseDomain.c
+++ b/snmplib/transports/snmpIPv4BaseDomain.c
@@ -251,20 +251,24 @@ void netsnmp_ipv4_get_taddr(struct netsnmp_transport_s 
*t, void **addr,
 
     *addr_len = 6;
     if ((*addr = malloc(*addr_len))) {
-        memcpy(*addr,     &sin->sin_addr, 4);
-        memcpy(*addr + 4, &sin->sin_port, 2);
+        unsigned char *p = *addr;
+
+        memcpy(p,     &sin->sin_addr, 4);
+        memcpy(p + 4, &sin->sin_port, 2);
     }
 }
 
 int netsnmp_ipv4_ostring_to_sockaddr(struct sockaddr_in *sin, const void *o,
                                      size_t o_len)
 {
+    const char *p = o;
+
     if (o_len != 6)
         return 0;
 
     memset(sin, 0, sizeof(*sin));
     sin->sin_family = AF_INET;
-    memcpy(&sin->sin_addr, o + 0, 4);
-    memcpy(&sin->sin_port, o + 4, 2);
+    memcpy(&sin->sin_addr, p + 0, 4);
+    memcpy(&sin->sin_port, p + 4, 2);
     return 1;
 }
diff --git a/snmplib/transports/snmpIPv6BaseDomain.c 
b/snmplib/transports/snmpIPv6BaseDomain.c
index c4a801f87228..46f70c028cda 100644
--- a/snmplib/transports/snmpIPv6BaseDomain.c
+++ b/snmplib/transports/snmpIPv6BaseDomain.c
@@ -160,21 +160,25 @@ void netsnmp_ipv6_get_taddr(struct netsnmp_transport_s 
*t, void **addr,
 
     *addr_len = 18;
     if ((*addr = malloc(*addr_len))) {
-        memcpy(*addr,      &sin6->sin6_addr, 16);
-        memcpy(*addr + 16, &sin6->sin6_port, 2);
+        unsigned char *p = *addr;
+
+        memcpy(p,      &sin6->sin6_addr, 16);
+        memcpy(p + 16, &sin6->sin6_port, 2);
     }
 }
 
 int netsnmp_ipv6_ostring_to_sockaddr(struct sockaddr_in6 *sin6, const void *o,
                                      size_t o_len)
 {
+    const char *p = o;
+
     if (o_len != 18)
         return 0;
 
     memset(sin6, 0, sizeof(*sin6));
     sin6->sin6_family = AF_INET6;
-    memcpy(&sin6->sin6_addr, o + 0,  16);
-    memcpy(&sin6->sin6_port, o + 16, 2);
+    memcpy(&sin6->sin6_addr, p + 0,  16);
+    memcpy(&sin6->sin6_port, p + 16, 2);
     return 1;
 }
 
-- 
2.17.1


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Net-snmp-coders mailing list
Net-snmp-coders@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders

Reply via email to