[linux-dvb] 64-bit warnings when compiling v4l-dvb

Johannes Stezenbach js at linuxtv.org
Thu Dec 8 01:18:10 CET 2005


On Wed, Dec 07, 2005 at 10:55:27PM +0100, Peter Beutner wrote:
> Johannes Stezenbach schrieb:
> > Thanks for the report. See also:
> > http://linuxtv.org/pipermail/linux-dvb/2005-October/005630.html
> > 
> > I haven't had time to look into it, and still would welcome
> > patches from others to fix these issues.
> 
> It's not really an issue(besides the compiler warning).
> 
> The problem is:
> err = fe->ops->dishnetwork_send_legacy_command(fe, (unsigned int)parg);
>                                                   ^^^^^^^^^^^^^^^^ (where parg is void*)
> 
> But parg is never greater than 32bit in this case because we misuse the pointer to pass an
> integer, so casting from a 64bit pointer to 32bit integer doesn't harm here. We know that
> but the compiler doesn't know ;)
> 
> We could write it as:
> 
> err = fe->ops->dishnetwork_send_legacy_command(fe, (unsigned long)parg);
> 
> which shuts up the warnung, and the compiler then automatically casts from long->int.
> But which isn't really nice either imo.
> Or to make it clearer:
> 
> unsigned long val = (unsigned long) parg;
> err = fe->ops->dishnetwork_send_legacy_command(fe, (unsigned int)val);
> 
> which is even more ugly.
> 
> Or convert dishnetwork_send_legacy_command in all to drivers to accept a long instead of
> an int.Don't know if it's worth the effort though.
> Or just live with the warning ;)
> 
> Dunno which way you would prefer?

IMHO if dishnetwork_send_legacy_command() takes the ioctl parg argument it
should be changed to take an unsigned long.


Johannes



More information about the linux-dvb mailing list