diff options
author | Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org> | 2011-12-13 23:55:00 +0059 |
---|---|---|
committer | Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org> | 2011-12-17 12:01:45 +0059 |
commit | 4607b5652805bdc46ae3ccd2ecf7fe7a72e5767a (patch) | |
tree | b8fa3266ecfc9c60e1616fd3cdb48fd4dd27145f | |
parent | 24fd26b3840ae9dbd8bfc45cf7f8d04b1da09858 (diff) | |
download | core-4607b5652805bdc46ae3ccd2ecf7fe7a72e5767a.tar.gz |
libusbhost: Fix aliasing violations
Signed-off-by: Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>
-rw-r--r-- | libusbhost/usbhost.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/libusbhost/usbhost.c b/libusbhost/usbhost.c index b1c967d2a..5f0ef8407 100644 --- a/libusbhost/usbhost.c +++ b/libusbhost/usbhost.c @@ -63,7 +63,10 @@ struct usb_host_context { struct usb_device { char dev_name[64]; + union { unsigned char desc[4096]; + struct usb_device_descriptor desc_s; + }; int desc_length; int fd; int writeable; @@ -139,7 +142,10 @@ void usb_host_run(struct usb_host_context *context, void *client_data) { struct inotify_event* event; - char event_buf[512]; + union { + char event_buf[512]; + struct inotify_event evbuf; + } eventbuf; char path[100]; int i, ret, done = 0; int wd, wds[10]; @@ -172,9 +178,9 @@ void usb_host_run(struct usb_host_context *context, done |= discovery_done_cb(client_data); while (!done) { - ret = read(context->fd, event_buf, sizeof(event_buf)); + ret = read(context->fd, eventbuf.event_buf, sizeof(eventbuf.event_buf)); if (ret >= (int)sizeof(struct inotify_event)) { - event = (struct inotify_event *)event_buf; + event = &eventbuf.evbuf; wd = event->wd; if (wd == wds[0]) { i = atoi(event->name); @@ -320,19 +326,19 @@ char* usb_device_get_name_from_unique_id(int id) uint16_t usb_device_get_vendor_id(struct usb_device *device) { - struct usb_device_descriptor* desc = (struct usb_device_descriptor*)device->desc; + struct usb_device_descriptor* desc = &device->desc_s; return __le16_to_cpu(desc->idVendor); } uint16_t usb_device_get_product_id(struct usb_device *device) { - struct usb_device_descriptor* desc = (struct usb_device_descriptor*)device->desc; + struct usb_device_descriptor* desc = &device->desc_s; return __le16_to_cpu(desc->idProduct); } const struct usb_device_descriptor* usb_device_get_device_descriptor(struct usb_device *device) { - return (struct usb_device_descriptor*)device->desc; + return &device->desc_s; } char* usb_device_get_string(struct usb_device *device, int id) @@ -375,7 +381,7 @@ char* usb_device_get_string(struct usb_device *device, int id) char* usb_device_get_manufacturer_name(struct usb_device *device) { - struct usb_device_descriptor *desc = (struct usb_device_descriptor *)device->desc; + struct usb_device_descriptor *desc = &device->desc_s; if (desc->iManufacturer) return usb_device_get_string(device, desc->iManufacturer); @@ -385,7 +391,7 @@ char* usb_device_get_manufacturer_name(struct usb_device *device) char* usb_device_get_product_name(struct usb_device *device) { - struct usb_device_descriptor *desc = (struct usb_device_descriptor *)device->desc; + struct usb_device_descriptor *desc = &device->desc_s; if (desc->iProduct) return usb_device_get_string(device, desc->iProduct); @@ -395,7 +401,7 @@ char* usb_device_get_product_name(struct usb_device *device) char* usb_device_get_serial(struct usb_device *device) { - struct usb_device_descriptor *desc = (struct usb_device_descriptor *)device->desc; + struct usb_device_descriptor *desc = &device->desc_s; if (desc->iSerialNumber) return usb_device_get_string(device, desc->iSerialNumber); |