summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Koegler <mkoegler@auto.tuwien.ac.at>2010-04-05 17:11:32 +0200
committerPete Batard <pbatard@gmail.com>2010-04-07 11:11:28 +0100
commitc73ee65a51084e0af9c2d94ce61a178902716f3a (patch)
treecea8f7bbd909b71fa52b1e052822cf8bb55bbb3d
parenta055a56cf17301b03a6aab63ec370aee945cb02f (diff)
downloadlibusb-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--AUTHORS1
-rw-r--r--libusb/os/linux_usbfs.c4
2 files changed, 3 insertions, 2 deletions
diff --git a/AUTHORS b/AUTHORS
index df78688..cb7a061 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -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;