]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
fix bad color name handling
authorBVK Chaitanya <bvk@dbook>
Thu, 12 Aug 2010 15:15:55 +0000 (20:45 +0530)
committerBVK Chaitanya <bvk@dbook>
Thu, 12 Aug 2010 15:15:55 +0000 (20:45 +0530)
include/grub/normal.h
normal/color.c
normal/main.c

index a33e42e6176e0eedb753cb7927333e4de0a7c369..2a0298bc6fb2122c827da183a2e4f96207c2b03e 100644 (file)
@@ -73,7 +73,7 @@ grub_err_t grub_normal_print_device_info (const char *name);
 /* Defined in `color.c'.  */
 char *grub_env_write_color_normal (struct grub_env_var *var, const char *val);
 char *grub_env_write_color_highlight (struct grub_env_var *var, const char *val);
-void grub_parse_color_name_pair (grub_uint8_t *ret, const char *name);
+int grub_parse_color_name_pair (grub_uint8_t *ret, const char *name);
 
 /* Defined in `menu_text.c'.  */
 void grub_wait_after_message (void);
index bae082911603ca7e54255d122faacecc178afdda..a16d1c2f9febbeff353f3764c571ae38e6ea840a 100644 (file)
@@ -56,22 +56,23 @@ parse_color_name (grub_uint8_t *ret, char *name)
   return -1;
 }
 
-void
-grub_parse_color_name_pair (grub_uint8_t *ret, const char *name)
+int
+grub_parse_color_name_pair (grub_uint8_t *color, const char *name)
 {
+  int result = 1;
   grub_uint8_t fg, bg;
   char *fg_name, *bg_name;
 
   /* nothing specified by user */
   if (name == NULL)
-    return;
+    return result;
 
   fg_name = grub_strdup (name);
   if (fg_name == NULL)
     {
       /* "out of memory" message was printed by grub_strdup() */
       grub_wait_after_message ();
-      return;
+      return result;
     }
 
   bg_name = grub_strchr (fg_name, '/');
@@ -97,10 +98,12 @@ grub_parse_color_name_pair (grub_uint8_t *ret, const char *name)
       goto free_and_return;
     }
 
-  *ret = (bg << 4) | fg;
+  *color = (bg << 4) | fg;
+  result = 0;
 
 free_and_return:
   grub_free (fg_name);
+  return result;
 }
 
 static grub_uint8_t color_normal, color_highlight;
@@ -122,10 +125,10 @@ set_colors (void)
 
 /* Replace default `normal' colors with the ones specified by user (if any).  */
 char *
-grub_env_write_color_normal (struct grub_env_var *var __attribute__ ((unused)),
-                            const char *val)
+grub_env_write_color_normal (struct grub_env_var *var, const char *val)
 {
-  grub_parse_color_name_pair (&color_normal, val);
+  if (grub_parse_color_name_pair (&color_normal, val))
+    return 0;
 
   set_colors ();
 
@@ -134,10 +137,10 @@ grub_env_write_color_normal (struct grub_env_var *var __attribute__ ((unused)),
 
 /* Replace default `highlight' colors with the ones specified by user (if any).  */
 char *
-grub_env_write_color_highlight (struct grub_env_var *var __attribute__ ((unused)),
-                               const char *val)
+grub_env_write_color_highlight (struct grub_env_var *var, const char *val)
 {
-  grub_parse_color_name_pair (&color_highlight, val);
+  if (grub_parse_color_name_pair (&color_highlight, val))
+    return 0;
 
   set_colors ();
 
index 5df88946653b288fc365a72963e3e9f7b6bbf900..49658fd242a8b4969734ab64c10e57ca1627ec9b 100644 (file)
@@ -705,6 +705,10 @@ GRUB_MOD_INIT(normal)
   /* Preserve hooks after context changes.  */
   grub_env_export ("color_normal");
   grub_env_export ("color_highlight");
+
+  /* Set default color names.  */
+  grub_env_set ("color_normal", "white/black");
+  grub_env_set ("color_highlight", "black/white");
 }
 
 GRUB_MOD_FINI(normal)