Re: [PATCH 06/11] [C++/mingw] ser-tcp.c casts

Simon Marchi
2015-11-02T20:40:22Z

On 15-11-02 02:36 PM, Pedro Alves wrote:
> Fixes a few errors like these:
>
> ../../src/gdb/ser-tcp.c: In function 'int net_open(serial*, const char*)':
> ../../src/gdb/ser-tcp.c:286:73: error: invalid conversion from 'void*' to 'char*' [-fpermissive]
> res = getsockopt (scb->fd, SOL_SOCKET, SO_ERROR, (void *) &err, &len);
> ^
>
> gdb/ChangeLog:
> 2015-11-01 Pedro Alves <palves@redhat.com>
>
> * ser-tcp.c (net_open) [USE_WIN32API]: Cast getsockopt argument to
> char * instead of void *.
> (net_read_prim): Cast recv argument to
> char * instead of void *.
> (net_write_prim): Cast send argument to char * instead of void *.
> ---
> gdb/ser-tcp.c | 19 +++++++++++++------
> 1 file changed, 13 insertions(+), 6 deletions(-)
>
> diff --git a/gdb/ser-tcp.c b/gdb/ser-tcp.c
> index ce40b61..507e0a1 100644
> --- a/gdb/ser-tcp.c
> +++ b/gdb/ser-tcp.c
> @@ -280,10 +280,12 @@ net_open (struct serial *scb, const char *name)
>
> len = sizeof (err);
> /* On Windows, the fourth parameter to getsockopt is a "char *";
> - on UNIX systems it is generally "void *". The cast to "void *"
> - is OK everywhere, since in C "void *" can be implicitly
> - converted to any pointer type. */
> + on UNIX systems it is generally "void *". */
> +#ifdef USE_WIN32API
> + res = getsockopt (scb->fd, SOL_SOCKET, SO_ERROR, (char *) &err, &len);
> +#else
> res = getsockopt (scb->fd, SOL_SOCKET, SO_ERROR, (void *) &err, &len);
> +#endif

You could have done exactly the opposite of the old comment, that is cast to
(char *). It shouldn't generate any warning in either case. But I think that
your way is fine too.