I had some code that was using libusb to usb_get_string, which maps to struct usb_ctrltransfer ctrl; char buf[256]; ctrl.bRequestType = USB_ENDPOINT_IN; ctrl.bRequest = request = USB_REQ_GET_DESCRIPTOR; ctrl.wValue = (USB_DT_STRING << 8) + index; // 3, 2 or 1 ctrl.wIndex = 0x0409; ctrl.wLength = 256; ctrl.data = buf; ctrl.timeout = 1000; return ioctl(dev->fd, IOCTL_USB_CONTROL, &ctrl); Normally, this returns the length of the string descriptor, which is 2 + 2 * (number of unicode characters). In fact, buf[0] equals the return value. However, when addressing this request to something with idVendor = 0x1d6b, the return value is 1 more. Some code I had a sanity check for that and choked. It appears to be a deliberate decision inside ascii2utf() and rh_string(), but it ends up being different from real USB devices. Isn't that kind of a bug? I mean, the UTF-16 string is full of null bytes. What benefit is there in adding another one? -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html