]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Pause the execution (10s max) if any errors are displayed so the user
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 20 Sep 2010 15:46:35 +0000 (17:46 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 20 Sep 2010 15:46:35 +0000 (17:46 +0200)
has a chance to see them.

* grub-core/kern/err.c (grub_err_printed_errors): New variable.
(grub_print_error): Increment grub_err_printed_errors.
* grub-core/normal/menu.c (grub_menu_execute_entry): Pause the
execution if any errors were displayed.
(show_menu): Remove old code for pause.
* grub-core/normal/menu_entry.c (run): Likewise.
* grub-core/normal/term.c (grub_normal_char_counter): Removed. All
users updated.
(grub_normal_get_char_counter): Likewise.
* include/grub/err.h (grub_err_printed_errors): New external variable.
* include/grub/normal.h (grub_normal_get_char_counter): Removed.

ChangeLog
grub-core/kern/err.c
grub-core/normal/menu.c
grub-core/normal/menu_entry.c
grub-core/normal/term.c
include/grub/err.h
include/grub/normal.h

index 6d503edf18299f604fc04bf53e4090a641875de3..3b70597a035dfc9c476eaa6cdc59e83784d67f13 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2010-09-20  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       Pause the execution (10s max) if any errors are displayed so the user
+       has a chance to see them.
+
+       * grub-core/kern/err.c (grub_err_printed_errors): New variable.
+       (grub_print_error): Increment grub_err_printed_errors.
+       * grub-core/normal/menu.c (grub_menu_execute_entry): Pause the
+       execution if any errors were displayed.
+       (show_menu): Remove old code for pause.
+       * grub-core/normal/menu_entry.c (run): Likewise.
+       * grub-core/normal/term.c (grub_normal_char_counter): Removed. All
+       users updated.
+       (grub_normal_get_char_counter): Likewise.
+       * include/grub/err.h (grub_err_printed_errors): New external variable.
+       * include/grub/normal.h (grub_normal_get_char_counter): Removed.
+
 2010-09-20  Vladimir Serbinenko  <phcoder@gmail.com>
 
        Support multiboot VBE info.
index 8272467f5e5dee58dee43cb1325d29194c347dd8..74f3915aa77e7b90c751cacfe8943b300a794cdb 100644 (file)
@@ -27,6 +27,7 @@
 
 grub_err_t grub_errno;
 char grub_errmsg[GRUB_MAX_ERRMSG];
+int grub_err_printed_errors;
 
 static struct
 {
@@ -122,7 +123,10 @@ grub_print_error (void)
   do
     {
       if (grub_errno != GRUB_ERR_NONE)
-        grub_err_printf (_("error: %s.\n"), grub_errmsg);
+       {
+         grub_err_printf (_("error: %s.\n"), grub_errmsg);
+         grub_err_printed_errors++;
+       }
     }
   while (grub_error_pop ());
 
index 62b0d0a6ac46350a7b9f687be14837b8adef8ddd..9c0a2182f1d9ebe1ebf2ca5e3276915477b37ec4 100644 (file)
@@ -158,6 +158,7 @@ void
 grub_menu_execute_entry(grub_menu_entry_t entry)
 {
   grub_err_t err = GRUB_ERR_NONE;
+  int errs_before;
 
   if (entry->restricted)
     err = grub_auth_check_authentication (entry->users);
@@ -169,9 +170,14 @@ grub_menu_execute_entry(grub_menu_entry_t entry)
       return;
     }
 
+  errs_before = grub_err_printed_errors;
+
   grub_env_set ("chosen", entry->title);
   grub_script_execute_sourcecode (entry->sourcecode, entry->argc, entry->args);
 
+  if (errs_before != grub_err_printed_errors)
+    grub_wait_after_message ();
+
   if (grub_errno == GRUB_ERR_NONE && grub_loader_is_loaded ())
     /* Implicit execution of boot, only if something is loaded.  */
     grub_command_execute ("boot", 0, 0);
@@ -583,20 +589,9 @@ show_menu (grub_menu_t menu, int nested)
       grub_cls ();
 
       if (auto_boot)
-        {
-          grub_menu_execute_with_fallback (menu, e, &execution_callback, 0);
-        }
+       grub_menu_execute_with_fallback (menu, e, &execution_callback, 0);
       else
-        {
-         int chars_before = grub_normal_get_char_counter ();
-          grub_errno = GRUB_ERR_NONE;
-          grub_menu_execute_entry (e);
-         grub_print_error ();
-         grub_errno = GRUB_ERR_NONE;
-
-          if (chars_before != grub_normal_get_char_counter ())
-           grub_wait_after_message ();
-        }
+       grub_menu_execute_entry (e);
     }
 
   return GRUB_ERR_NONE;
index 87292d445eea078d042f133298b3cd76edd9fc67..82506fa6f004b437f858c19b324746479b35fa66 100644 (file)
@@ -1161,6 +1161,7 @@ run (struct screen *screen)
 {
   int currline = 0;
   char *nextline;
+  int errs_before;
 
   auto grub_err_t editor_getline (char **line, int cont);
   grub_err_t editor_getline (char **line, int cont __attribute__ ((unused)))
@@ -1194,6 +1195,7 @@ run (struct screen *screen)
   grub_printf_ (N_("Booting a command list"));
   grub_printf ("\n\n");
 
+  errs_before = grub_err_printed_errors;
 
   /* Execute the script, line for line.  */
   while (currline < screen->num_lines)
@@ -1203,6 +1205,9 @@ run (struct screen *screen)
        break;
     }
 
+  if (errs_before != grub_err_printed_errors)
+    grub_wait_after_message ();
+
   if (grub_errno == GRUB_ERR_NONE && grub_loader_is_loaded ())
     /* Implicit execution of boot, only if something is loaded.  */
     grub_command_execute ("boot", 0, 0);
@@ -1382,13 +1387,7 @@ grub_menu_entry_run (grub_menu_entry_t entry)
 
        case GRUB_TERM_CTRL | 'x':
        case GRUB_TERM_KEY_F10:
-         {
-           int chars_before = grub_normal_get_char_counter ();
-           run (screen);
-
-           if (chars_before != grub_normal_get_char_counter ())
-             grub_wait_after_message ();
-         }
+         run (screen);
          goto refresh;
 
        case GRUB_TERM_CTRL | 'r':
index 760900e8670321f87632c90f0dd34fcc9b5c3d4d..fe6240eb0a534954c48eda4b3ae402a2bcda17e9 100644 (file)
@@ -42,17 +42,9 @@ static struct term_state *term_states = NULL;
 /* If the more pager is active.  */
 static int grub_more;
 
-static int grub_normal_char_counter = 0;
-
 static void
 putcode_real (grub_uint32_t code, struct grub_term_output *term);
 
-int
-grub_normal_get_char_counter (void)
-{
-  return grub_normal_char_counter;
-}
-
 void
 grub_normal_reset_more (void)
 {
@@ -409,8 +401,6 @@ putglyph (const struct grub_unicode_glyph *c, struct grub_term_output *term)
       .estimated_width = 1
     };
 
-  grub_normal_char_counter++;
-
   if (c->base == '\t' && term->getxy)
     {
       int n;
index d35bba4747237a9dd5baa424e0f8be1ccabc6e18..e532e19e29a2be501b0917d0030ef0a76c60c90e 100644 (file)
@@ -66,6 +66,7 @@ void EXPORT_FUNC(grub_fatal) (const char *fmt, ...) __attribute__ ((noreturn));
 void EXPORT_FUNC(grub_error_push) (void);
 int EXPORT_FUNC(grub_error_pop) (void);
 void EXPORT_FUNC(grub_print_error) (void);
+extern int EXPORT_VAR(grub_err_printed_errors);
 int grub_err_printf (const char *fmt, ...)
      __attribute__ ((format (printf, 1, 2)));
 
index 72912e524b68c6837ff11cbb456f96baebf16a4f..a3827f584ee958e15ee5f7898a1972ed4fb9df3e 100644 (file)
@@ -110,7 +110,6 @@ void read_terminal_list (const char *prefix);
 
 void grub_set_more (int onoff);
 
-int grub_normal_get_char_counter (void);
 void grub_normal_reset_more (void);
 
 void grub_xputs_normal (const char *str);