diff options
author | Martin Koegler <mkoegler@auto.tuwien.ac.at> | 2010-04-05 17:11:32 +0200 |
---|---|---|
committer | Pete Batard <pbatard@gmail.com> | 2010-04-07 11:11:28 +0100 |
commit | c73ee65a51084e0af9c2d94ce61a178902716f3a (patch) | |
tree | cea8f7bbd909b71fa52b1e052822cf8bb55bbb3d | |
parent | a055a56cf17301b03a6aab63ec370aee945cb02f (diff) | |
download | libusb-c73ee65a51084e0af9c2d94ce61a178902716f3a.tar.gz |
Linux: Fix endianness handling of usbfs config descriptors (#27)
driver/usb/core/devio.c function usbdev_read translate the follwing files
to CPU endianess:
le16_to_cpus(&temp_desc.bcdUSB);
le16_to_cpus(&temp_desc.idVendor);
le16_to_cpus(&temp_desc.idProduct);
le16_to_cpus(&temp_desc.bcdDevice);
All other data is passed without any change.
libusb/os/linux_usbfs.c calls usbi_parse_descriptor with host_endian=1
for config descriptors. According to the kernel code, they must be
processed with host_endian=0, as they are not translated by the kernel.
Signed-off-by: Martin Koegler <mkoegler@auto.tuwien.ac.at>
-rw-r--r-- | AUTHORS | 1 | ||||
-rw-r--r-- | libusb/os/linux_usbfs.c | 4 |
2 files changed, 3 insertions, 2 deletions
@@ -15,6 +15,7 @@ David Moore Felipe Balbi Hans Ulrich Niedermann Ludovic Rousseau +Martin Koegler Mikhail Gusarov Rob Walker Toby Peterson diff --git a/libusb/os/linux_usbfs.c b/libusb/os/linux_usbfs.c index dd38e65..53d2e94 100644 --- a/libusb/os/linux_usbfs.c +++ b/libusb/os/linux_usbfs.c @@ -399,7 +399,7 @@ static int seek_to_next_config(struct libusb_context *ctx, int fd) } /* seek forward to end of config */ - usbi_parse_descriptor(tmp, "bbwbb", &config, 1); + usbi_parse_descriptor(tmp, "bbwbb", &config, 0); off = lseek(fd, config.wTotalLength - sizeof(tmp), SEEK_CUR); if (off < 0) { usbi_err(ctx, "seek failed ret=%d errno=%d", off, errno); @@ -606,7 +606,7 @@ static int cache_active_config(struct libusb_device *dev, int fd, return r; } - usbi_parse_descriptor(tmp, "bbw", &config, 1); + usbi_parse_descriptor(tmp, "bbw", &config, 0); buf = malloc(config.wTotalLength); if (!buf) return LIBUSB_ERROR_NO_MEM; |