+2009-08-28 Vladimir Serbinenko <phcoder@gmail.com>
+
+ * bus/usb/usb.c (grub_usb_get_string): Move from here ...
+ * commands/usbtest.c (grub_usb_get_string): ... move here.
+ (usb_print_str): Fix error handling.
+ * include/grub/usb.h (grub_usb_get_string): Remove.
+
2009-08-28 Vladimir Serbinenko <phcoder@gmail.com>
* kern/file.c (grub_file_read): Check offset.
return NULL;
}
-grub_usb_err_t
-grub_usb_get_string (grub_usb_device_t dev, grub_uint8_t index, int langid,
- char **string)
-{
- struct grub_usb_desc_str descstr;
- struct grub_usb_desc_str *descstrp;
- grub_usb_err_t err;
-
- /* Only get the length. */
- err = grub_usb_control_msg (dev, 1 << 7,
- 0x06, (3 << 8) | index,
- langid, 1, (char *) &descstr);
- if (err)
- return err;
-
- descstrp = grub_malloc (descstr.length);
- if (! descstrp)
- return GRUB_USB_ERR_INTERNAL;
- err = grub_usb_control_msg (dev, 1 << 7,
- 0x06, (3 << 8) | index,
- langid, descstr.length, (char *) descstrp);
-
- *string = grub_malloc (descstr.length / 2);
- if (! *string)
- {
- grub_free (descstrp);
- return GRUB_USB_ERR_INTERNAL;
- }
-
- grub_utf16_to_utf8 ((grub_uint8_t *) *string, descstrp->str, descstrp->length / 2 - 1);
- (*string)[descstr.length / 2 - 1] = '\0';
- grub_free (descstrp);
-
- return GRUB_USB_ERR_NONE;
-}
-
grub_usb_err_t
grub_usb_device_initialize (grub_usb_device_t dev)
{
"High"
};
+static grub_usb_err_t
+grub_usb_get_string (grub_usb_device_t dev, grub_uint8_t index, int langid,
+ char **string)
+{
+ struct grub_usb_desc_str descstr;
+ struct grub_usb_desc_str *descstrp;
+ grub_usb_err_t err;
+
+ /* Only get the length. */
+ err = grub_usb_control_msg (dev, 1 << 7,
+ 0x06, (3 << 8) | index,
+ langid, 1, (char *) &descstr);
+ if (err)
+ return err;
+
+ descstrp = grub_malloc (descstr.length);
+ if (! descstrp)
+ return GRUB_USB_ERR_INTERNAL;
+ err = grub_usb_control_msg (dev, 1 << 7,
+ 0x06, (3 << 8) | index,
+ langid, descstr.length, (char *) descstrp);
+
+ *string = grub_malloc (descstr.length / 2);
+ if (! *string)
+ {
+ grub_free (descstrp);
+ return GRUB_USB_ERR_INTERNAL;
+ }
+
+ grub_utf16_to_utf8 ((grub_uint8_t *) *string, descstrp->str, descstrp->length / 2 - 1);
+ (*string)[descstr.length / 2 - 1] = '\0';
+ grub_free (descstrp);
+
+ return GRUB_USB_ERR_NONE;
+}
+
static void
usb_print_str (const char *description, grub_usb_device_t dev, int idx)
{
char *name;
+ grub_usb_err_t err;
/* XXX: LANGID */
if (! idx)
return;
- grub_usb_get_string (dev, idx, 0x0409, &name);
- grub_printf ("%s: `%s'\n", description, name);
- grub_free (name);
+ err = grub_usb_get_string (dev, idx, 0x0409, &name);
+ if (err)
+ grub_printf ("Error %d retrieving %s\n", err, description);
+ else
+ {
+ grub_printf ("%s: `%s'\n", description, name);
+ grub_free (name);
+ }
}
static int
grub_usb_err_t grub_usb_set_configuration (grub_usb_device_t dev,
int configuration);
-grub_usb_err_t grub_usb_get_string (grub_usb_device_t dev, grub_uint8_t index,
- int langid, char **string);
-
void grub_usb_controller_dev_register (grub_usb_controller_dev_t usb);
void grub_usb_controller_dev_unregister (grub_usb_controller_dev_t usb);