[vlc-devel] [PATCH v2] access_output: udp: fix conversion from uint8_t* on Windows
Rémi Denis-Courmont
remi at remlab.net
Fri Mar 27 17:09:20 CET 2020
Le perjantaina 27. maaliskuuta 2020, 18.00.45 EET Alexandre Janniaux a écrit :
> Hi,
>
> On Fri, Mar 27, 2020 at 05:39:18PM +0200, Rémi Denis-Courmont wrote:
> > Le perjantaina 27. maaliskuuta 2020, 17.10.49 EET Alexandre Janniaux a
écrit :
> > > Like discussed on the mailing list, casting to char* would be incorrect
> >
> > You have a uint8_t * here. You can only convert it to unsigned char * (1)
> > or keep it as is.
>
> No I can cast to (void*) without aliasing issues, as far as I know.
You can, but the function will have to cast back to unsigned char * before
dereference. The pointer can only be dereferenced as uint8_t * or
unsigned char *.
My point is that there's only two reasonable types for untyped binary data in
C. The implicit convenient one is void *, and the explicit inconvenient one is
unsigned char *. Anything else is a bug in the function prototype (and likely
the implementation).
> > Casting it to void * to mute pointer type warnings is something that we
> > have consistently rejected, as it essentially amounts to hiding bugs.
>
> I agree, it's a much better argument, but the other workarounds I can
> think of so far are:
>
> + wrap read() in a macro on Windows to use the correct type, which is
> awful, can lead to misleading warnings depending on includes and is
> more or less the same.
>
> + wrap read in a function and apply the correct fix for Windows here
> which is better but could non-intuitive. Adding warnings on usage of
> read/recv/write/send without going to the wrapper could help though.
>
> + rename the function in Microsoft headers with defines, and wrap the
> symbol to ensure we use the same prototype everywhere, but it could
> stop working if it is declared with parenthesis in Microsoft headers
> and could break even more things.
Do nothing as we have (not) done for 20 years.
Denis and I warned about platform bugs as one of the reasons against using -
Werror. This is but an example.
--
Реми Дёни-Курмон
http://www.remlab.net/
More information about the vlc-devel
mailing list