On Thursday, December 30, 2010 16:00:41 Mauro Carvalho Chehab wrote: > Fix two gcc warnings: > > drivers/media/video/ivtv/ivtv-i2c.c:170: warning: cast from pointer to integer of different size > drivers/media/video/ivtv/ivtv-i2c.c:171: warning: cast from pointer to integer of different size > $ gcc --version > gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48) > > They seem bogus, but, as the original code also has problems with > LE/BE, just change its implementation to be clear. Definitely not bogus: unsigned char keybuf[4]; .. *ir_key = (u32) keybuf; Here keybuf == &keybuf[0]. So you put the address of keybuf in *ir_key. Which is indeed of a different size in the case of a 64-bit architecture. What you probably meant to do is: *ir_key = *(u32 *)keybuf; Note that the code in your patch assumes that keybuf is in big-endian order. I assume that's what it should be? Regards, Hans > Signed-off-by: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx> > > diff --git a/drivers/media/video/ivtv/ivtv-i2c.c b/drivers/media/video/ivtv/ivtv-i2c.c > index 2bed430..e103b8f 100644 > --- a/drivers/media/video/ivtv/ivtv-i2c.c > +++ b/drivers/media/video/ivtv/ivtv-i2c.c > @@ -167,8 +167,8 @@ static int get_key_adaptec(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw) > keybuf[2] &= 0x7f; > keybuf[3] |= 0x80; > > - *ir_key = (u32) keybuf; > - *ir_raw = (u32) keybuf; > + *ir_key = keybuf[3] | keybuf[2] << 8 | keybuf[1] << 16 |keybuf[0] << 24; > + *ir_raw = *ir_key; > > return 1; > } > -- Hans Verkuil - video4linux developer - sponsored by Cisco -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html