From 0dd1aab7b5184f41ec838def8493d16cfe70b739 Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Thu, 18 Jun 2015 13:38:31 -0700 Subject: [PATCH] libusbhost: Fix problem reading USB string descriptors on some quirky devices Some devices fail to send USB string descriptors if you attempt to read more than 255 bytes Bug: 21871761 Change-Id: Id5b8865179f80523f0ad5b6028d49dd99db2b36b --- libusbhost/usbhost.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libusbhost/usbhost.c b/libusbhost/usbhost.c index 40b8b9f9f..b8e32154f 100644 --- a/libusbhost/usbhost.c +++ b/libusbhost/usbhost.c @@ -56,6 +56,9 @@ #define USB_FS_ID_SCANNER USB_FS_DIR "/%d/%d" #define USB_FS_ID_FORMAT USB_FS_DIR "/%03d/%03d" +// Some devices fail to send string descriptors if we attempt reading > 255 bytes +#define MAX_STRING_DESCRIPTOR_LENGTH 255 + // From drivers/usb/core/devio.c // I don't know why this isn't in a kernel header #define MAX_USBFS_BUFFER_SIZE 16384 @@ -449,8 +452,8 @@ const struct usb_device_descriptor* usb_device_get_device_descriptor(struct usb_ char* usb_device_get_string(struct usb_device *device, int id) { char string[256]; - __u16 buffer[128]; - __u16 languages[128]; + __u16 buffer[MAX_STRING_DESCRIPTOR_LENGTH / sizeof(__u16)]; + __u16 languages[MAX_STRING_DESCRIPTOR_LENGTH / sizeof(__u16)]; int i, result; int languageCount = 0;