Oliver Neukum <[EMAIL PROTECTED]> writes:
> Am Mittwoch, 7. Februar 2007 14:31 schrieb Sergei Organov:
>
>>   struct some_descriptor descr;
>>   ...
>>   read_from_wire(&descr, sizeof(descr));
>>   do_something_with_values(usb_get_uint16(descr->foo), bar);
>>   ...
>>   usb_set_uint16(descr->foo, 2385);
>>   
>> where:
>>   
>>   static inline unsigned usb_get_uint16(__u8 const *p)
>>   {
>>     return p[0] | (p[1] << 8);
>>   }
>
> It makes little sense to reinvent le16_to_cpu()

Unfortunately le16_to_cpu() is not exactly what's needed here, and if
I re-implement the above in terms of it:

static inline unsigned usb_get_uint16(__u8 const *p)
{
  typedef __u16 __u16_alias __attribute__((__may_alias__));
  __u16 v = *(__u16_alias*)p;
  return le16_to_cpu(v);
}

it will bring back alignment issues (the 'p' could be mis-aligned for
__u16 type access).

-- Sergei.

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to