On Friday 10 July 2009 19:05:28 Wolfgang Denk wrote:
> Scott Wood wrote:
> > On Mon, Jul 06, 2009 at 10:10:20AM -0500, Kumar Gala wrote:
> > > static int ata_scsiop_read_capacity10(ccb *pccb)
> > > {
> > >          u8 buf[8];
> > >
> > >          memset(buf, 0, 8);
> > >
> > >          *(u32 *) buf = le32_to_cpu(ataid[pccb->target]->lba_capacity);
> > >
> > >          buf[6] = 512 >> 8;
> > >          buf[7] = 512 & 0xff;
> > >
> > >          memcpy(pccb->pdata, buf, 8);
> > >
> > >          return 0;
> > > }
> > >
> > > how do we fix this (the *u32 *)buf ... line is the one causing
> > > warnings ?
> >
> > Use a union.
>
> Or simply a temporary variable to perform the conversion in two
> separate steps.

a union is generally what people are moving to to avoid aliasing issues, but 
that's only when rewriting the code isnt trivial to do.  in this case, it 
should be as you say and it would be simpler.  and the buf[] could be tossed 
completely as well as the largely useless memset().

probably something like:
u32 cap = le32_to_cpu(ataid[pccb->target]->lba_capacity);
memcpy(pccb->pdata, &cap, sizeof(cap));
pccb->pdata[4] = pccb->pdata[5] = '\0';
pccb->pdata[6] = 512 >> 8;
pccb->pdata[7] = 512 & 0xff;
-mike

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to