diff options
Diffstat (limited to 'sys/dev/usb/usb_subr.c')
-rw-r--r-- | sys/dev/usb/usb_subr.c | 57 |
1 files changed, 9 insertions, 48 deletions
diff --git a/sys/dev/usb/usb_subr.c b/sys/dev/usb/usb_subr.c index 26c1054..6b11b44 100644 --- a/sys/dev/usb/usb_subr.c +++ b/sys/dev/usb/usb_subr.c @@ -7,6 +7,7 @@ * $NetBSD: usb_subr.c,v 1.114 2004/06/23 02:30:52 mycroft Exp $ * $NetBSD: usb_subr.c,v 1.115 2004/06/23 05:23:19 mycroft Exp $ * $NetBSD: usb_subr.c,v 1.116 2004/06/23 06:27:54 mycroft Exp $ + * $NetBSD: usb_subr.c,v 1.119 2004/10/23 13:26:33 augustss Exp $ */ #include <sys/cdefs.h> @@ -90,7 +91,6 @@ extern int usbdebug; Static usbd_status usbd_set_config(usbd_device_handle, int); Static void usbd_devinfo_vp(usbd_device_handle, char *, char *, int); -Static char *usbd_get_string(usbd_device_handle, int, char *); Static int usbd_getnewaddr(usbd_bus_handle bus); #if defined(__NetBSD__) Static int usbd_print(void *aux, const char *pnp); @@ -196,51 +196,6 @@ usbd_get_string_desc(usbd_device_handle dev, int sindex, int langid, return (USBD_NORMAL_COMPLETION); } -char * -usbd_get_string(usbd_device_handle dev, int si, char *buf) -{ - int swap = dev->quirks->uq_flags & UQ_SWAP_UNICODE; - usb_string_descriptor_t us; - char *s; - int i, n; - u_int16_t c; - usbd_status err; - int size; - - if (si == 0) - return (0); - if (dev->quirks->uq_flags & UQ_NO_STRINGS) - return (0); - if (dev->langid == USBD_NOLANG) { - /* Set up default language */ - err = usbd_get_string_desc(dev, USB_LANGUAGE_TABLE, 0, &us, - &size); - if (err || size < 4) { - dev->langid = 0; /* Well, just pick something then */ - } else { - /* Pick the first language as the default. */ - dev->langid = UGETW(us.bString[0]); - } - } - err = usbd_get_string_desc(dev, si, dev->langid, &us, &size); - if (err) - return (0); - s = buf; - n = size / 2 - 1; - for (i = 0; i < n; i++) { - c = UGETW(us.bString[i]); - /* Convert from Unicode, handle buggy strings. */ - if ((c & 0xff00) == 0) - *s++ = c; - else if ((c & 0x00ff) == 0 && swap) - *s++ = c >> 8; - else - *s++ = '?'; - } - *s++ = 0; - return (buf); -} - Static void usbd_trim_spaces(char *p) { @@ -272,9 +227,15 @@ usbd_devinfo_vp(usbd_device_handle dev, char *v, char *p, int usedev) } if (usedev) { - vendor = usbd_get_string(dev, udd->iManufacturer, v); + if (usbd_get_string(dev, udd->iManufacturer, v)) + vendor = NULL; + else + vendor = v; usbd_trim_spaces(vendor); - product = usbd_get_string(dev, udd->iProduct, p); + if (usbd_get_string(dev, udd->iProduct, p)) + product = NULL; + else + product = p; usbd_trim_spaces(product); if (vendor && !*vendor) vendor = NULL; |