summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>2011-12-13 23:55:00 +0059
committerBernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>2011-12-17 12:01:45 +0059
commit4607b5652805bdc46ae3ccd2ecf7fe7a72e5767a (patch)
treeb8fa3266ecfc9c60e1616fd3cdb48fd4dd27145f
parent24fd26b3840ae9dbd8bfc45cf7f8d04b1da09858 (diff)
downloadcore-4607b5652805bdc46ae3ccd2ecf7fe7a72e5767a.tar.gz
libusbhost: Fix aliasing violations
Signed-off-by: Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>
-rw-r--r--libusbhost/usbhost.c24
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);