summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Lockwood <lockwood@google.com>2015-06-18 22:24:34 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-06-18 22:24:42 +0000
commit6ee7ff426893d8b8ebbb63e02073b9780912bd17 (patch)
tree033007633f44b8e7bf5ec6677316494270f9d1f1
parent60adb5fac864d05f19c6ae5e6295578749427ff3 (diff)
parent0dd1aab7b5184f41ec838def8493d16cfe70b739 (diff)
downloadsystem_core-6ee7ff426893d8b8ebbb63e02073b9780912bd17.zip
system_core-6ee7ff426893d8b8ebbb63e02073b9780912bd17.tar.gz
system_core-6ee7ff426893d8b8ebbb63e02073b9780912bd17.tar.bz2
Merge "libusbhost: Fix problem reading USB string descriptors on some quirky devices" into mnc-dev
-rw-r--r--libusbhost/usbhost.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/libusbhost/usbhost.c b/libusbhost/usbhost.c
index 40b8b9f..b8e3215 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;