Hi Bart,
I see that when it's a souce, you use "const char *", and when it's a
destination, you use "unsigned char *". I understand the reason for the
constness difference, but is there a reason for the signedness difference?
Bill
On Thu, Jun 21, 2018 at 10:23 PM Bart Van Assche <bvanass...@acm.org> wrote:
> 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
>
------------------------------------------------------------------------------
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