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>
+
+ 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.
grub_err_t grub_errno;
char grub_errmsg[GRUB_MAX_ERRMSG];
+int grub_err_printed_errors;
static struct
{
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 ());
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);
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);
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;
{
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)))
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)
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);
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':
/* 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)
{
.estimated_width = 1
};
- grub_normal_char_counter++;
-
if (c->base == '\t' && term->getxy)
{
int n;
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)));
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);