-static int usb_get_string_ascii(usb_dev_handle *dev, int index, int langid, char *buf, int buflen)
-{
- char buffer[256];
- int rval, i;
-
- if((rval = usb_control_msg(dev,
- USB_ENDPOINT_IN,
- USB_REQ_GET_DESCRIPTOR,
- (USB_DT_STRING << 8) + index,
- langid, buffer, sizeof(buffer),
- 1000)) < 0)
- return rval;
- if(buffer[1] != USB_DT_STRING)
- return 0;
- if((unsigned char)buffer[0] < rval)
- rval = (unsigned char)buffer[0];
- rval /= 2;
- /* lossy conversion to ISO Latin1 */
- for(i=1; i<rval; i++) {
- if(i > buflen) /* destination buffer overflow */
- break;
- buf[i-1] = buffer[2 * i];
- if(buffer[2 * i + 1] != 0) /* outside of ISO Latin1 range */
- buf[i-1] = '?';
- }
- buf[i-1] = 0;
- return i-1;
-}