All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Move grub_usb_get_string out of usb.mod
@ 2009-08-28 18:13 Vladimir 'phcoder' Serbinenko
  0 siblings, 0 replies; only message in thread
From: Vladimir 'phcoder' Serbinenko @ 2009-08-28 18:13 UTC (permalink / raw)
  To: The development of GRUB 2

[-- Attachment #1: Type: text/plain, Size: 462 bytes --]

usb.mod may be size-critical (if booting from usb) but usbtest.mod
isn't. grub_usb_get_string is in usb.mod but used only in usbtest.mod.
Furthermore it's the only potentially size-critical function except
filesystems which uses grub_utf16_to_utf8. Making it non-size critical
would allow to inline it and save few bytes. Here is a patch to fix
situation

-- 
Regards
Vladimir 'phcoder' Serbinenko

Personal git repository: http://repo.or.cz/w/grub2/phcoder.git

[-- Attachment #2: usb.diff --]
[-- Type: text/plain, Size: 4231 bytes --]

diff --git a/ChangeLog b/ChangeLog
index b657885..3e8d253 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 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.
 	* fs/hfs.c (grub_hfs_read_file): Remove unnecessary offset check.
 	* fs/jfs.c (grub_jfs_read_file): Likewise.
diff --git a/bus/usb/usb.c b/bus/usb/usb.c
index 310b8cc..8289185 100644
--- a/bus/usb/usb.c
+++ b/bus/usb/usb.c
@@ -156,42 +156,6 @@ grub_usb_get_endpdescriptor (grub_usb_device_t usbdev, int addr)
 }
 
 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)
 {
   struct grub_usb_desc_device *descdev;
diff --git a/commands/usbtest.c b/commands/usbtest.c
index 018c1a2..1c49d81 100644
--- a/commands/usbtest.c
+++ b/commands/usbtest.c
@@ -59,18 +59,60 @@ static const char *usb_devspeed[] =
     "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
diff --git a/include/grub/usb.h b/include/grub/usb.h
index 8dd3b6e..dc90e78 100644
--- a/include/grub/usb.h
+++ b/include/grub/usb.h
@@ -64,9 +64,6 @@ grub_usb_err_t grub_usb_clear_halt (grub_usb_device_t dev, int endpoint);
 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);

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2009-08-28 18:14 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-08-28 18:13 [PATCH] Move grub_usb_get_string out of usb.mod Vladimir 'phcoder' Serbinenko

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.