From c73ee65a51084e0af9c2d94ce61a178902716f3a Mon Sep 17 00:00:00 2001 From: Martin Koegler Date: Mon, 5 Apr 2010 17:11:32 +0200 Subject: 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 --- AUTHORS | 1 + libusb/os/linux_usbfs.c | 4 ++-- 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; -- cgit v1.2.1