|
|
ec94db3 |
--- grub-0.97/stage2/builtins.c 2008-09-30 10:24:37.000000000 -0400
|
|
|
ec94db3 |
+++ grub-0.97/stage2/builtins.c 2008-09-30 10:17:17.000000000 -0400
|
|
|
ec94db3 |
@@ -76,6 +76,7 @@
|
|
|
ec94db3 |
int auth = 0;
|
|
|
ec94db3 |
/* The timeout. */
|
|
|
ec94db3 |
int grub_timeout = -1;
|
|
|
ec94db3 |
+int grub_chaintimeout = -1;
|
|
|
ec94db3 |
/* Whether to show the menu or not. */
|
|
|
ec94db3 |
int show_menu = 1;
|
|
|
ec94db3 |
/* The BIOS drive map. */
|
|
|
ec94db3 |
@@ -531,7 +529,7 @@
|
|
|
ec94db3 |
{
|
|
|
ec94db3 |
"chainloader",
|
|
|
ec94db3 |
chainloader_func,
|
|
|
ec94db3 |
- BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
|
|
|
ec94db3 |
+ BUILTIN_CMDLINE | BUILTIN_HELP_LIST | BUILTIN_SHOW_CHAIN_MENU,
|
|
|
ec94db3 |
"chainloader [--force] FILE",
|
|
|
ec94db3 |
"Load the chain-loader FILE. If --force is specified, then load it"
|
|
|
ec94db3 |
" forcibly, whether the boot loader signature is present or not."
|
|
|
ec94db3 |
@@ -4957,6 +4955,37 @@
|
|
|
ec94db3 |
};
|
|
|
ec94db3 |
|
|
|
ec94db3 |
|
|
|
ec94db3 |
+/* timeout when chainloading */
|
|
|
ec94db3 |
+static int
|
|
|
ec94db3 |
+chaintimeout_func (char *arg, int flags)
|
|
|
ec94db3 |
+{
|
|
|
ec94db3 |
+ /* One-shot default shenanigans -- don't piss around with the menu! */
|
|
|
ec94db3 |
+ if (grub_chaintimeout != -1)
|
|
|
ec94db3 |
+ return 0;
|
|
|
ec94db3 |
+ if ((saved_entryno & STAGE2_ONCEONLY_ENTRY) != 0)
|
|
|
ec94db3 |
+ {
|
|
|
ec94db3 |
+ grub_chaintimeout = 0;
|
|
|
ec94db3 |
+ return 0;
|
|
|
ec94db3 |
+ }
|
|
|
ec94db3 |
+
|
|
|
ec94db3 |
+ if (! safe_parse_maxint (&arg, &grub_chaintimeout))
|
|
|
ec94db3 |
+ return 1;
|
|
|
ec94db3 |
+
|
|
|
ec94db3 |
+ return 0;
|
|
|
ec94db3 |
+}
|
|
|
ec94db3 |
+
|
|
|
ec94db3 |
+static struct builtin builtin_chaintimeout =
|
|
|
ec94db3 |
+{
|
|
|
ec94db3 |
+ "chaintimeout",
|
|
|
ec94db3 |
+ chaintimeout_func,
|
|
|
ec94db3 |
+ BUILTIN_MENU,
|
|
|
ec94db3 |
+#if 0
|
|
|
ec94db3 |
+ "chaintimeout SEC",
|
|
|
ec94db3 |
+ "Like timeout builtin, but used when an entry that chainloads is in config"
|
|
|
ec94db3 |
+#endif
|
|
|
ec94db3 |
+};
|
|
|
ec94db3 |
+
|
|
|
ec94db3 |
+
|
|
|
ec94db3 |
/* title */
|
|
|
ec94db3 |
static int
|
|
|
ec94db3 |
title_func (char *arg, int flags)
|
|
|
ec94db3 |
@@ -5147,6 +5176,7 @@
|
|
|
ec94db3 |
#endif /* SUPPORT_NETBOOT */
|
|
|
ec94db3 |
&builtin_cat,
|
|
|
ec94db3 |
&builtin_chainloader,
|
|
|
ec94db3 |
+ &builtin_chaintimeout,
|
|
|
ec94db3 |
&builtin_clear,
|
|
|
ec94db3 |
&builtin_cmp,
|
|
|
ec94db3 |
&builtin_color,
|
|
|
ec94db3 |
--- grub-0.97/stage2/shared.h 2008-09-30 10:24:37.000000000 -0400
|
|
|
ec94db3 |
+++ grub-0.97/stage2/shared.h 2008-09-30 10:14:58.000000000 -0400
|
|
|
ec94db3 |
@@ -837,6 +837,7 @@
|
|
|
ec94db3 |
#define BUILTIN_SCRIPT 0x8 /* Run in the script. */
|
|
|
ec94db3 |
#define BUILTIN_NO_ECHO 0x10 /* Don't print command on booting. */
|
|
|
ec94db3 |
#define BUILTIN_HELP_LIST 0x20 /* Show help in listing. */
|
|
|
ec94db3 |
+#define BUILTIN_SHOW_CHAIN_MENU 0x40 /* Force menu to show up because of chainloading */
|
|
|
ec94db3 |
|
|
|
ec94db3 |
/* The table for a builtin. */
|
|
|
ec94db3 |
struct builtin
|
|
|
ec94db3 |
@@ -872,6 +873,7 @@
|
|
|
ec94db3 |
extern kernel_t kernel_type;
|
|
|
ec94db3 |
extern int show_menu;
|
|
|
ec94db3 |
extern int grub_timeout;
|
|
|
ec94db3 |
+extern int grub_chaintimeout;
|
|
|
ec94db3 |
|
|
|
ec94db3 |
void init_builtins (void);
|
|
|
ec94db3 |
void init_config (void);
|
|
|
ec94db3 |
--- grub-0.97/stage2/stage2.c 2008-09-30 10:24:37.000000000 -0400
|
|
|
ec94db3 |
+++ grub-0.97/stage2/stage2.c 2008-09-30 10:16:35.000000000 -0400
|
|
|
ec94db3 |
@@ -1031,7 +1031,13 @@
|
|
|
ec94db3 |
if (! builtin)
|
|
|
ec94db3 |
/* Unknown command. Just skip now. */
|
|
|
ec94db3 |
continue;
|
|
|
ec94db3 |
-
|
|
|
ec94db3 |
+
|
|
|
ec94db3 |
+ if (builtin->flags & BUILTIN_SHOW_CHAIN_MENU)
|
|
|
ec94db3 |
+ {
|
|
|
ec94db3 |
+ show_menu = 1;
|
|
|
ec94db3 |
+ grub_timeout = grub_chaintimeout;
|
|
|
ec94db3 |
+ }
|
|
|
ec94db3 |
+
|
|
|
ec94db3 |
if (builtin->flags & BUILTIN_TITLE)
|
|
|
ec94db3 |
{
|
|
|
ec94db3 |
char *ptr;
|
|
|
ec94db3 |
diff -up grub-0.97/stage2/stage2.c.fix-plymouth-patch grub-0.97/stage2/stage2.c
|
|
|
ec94db3 |
--- grub-0.97/stage2/stage2.c.fix-plymouth-patch 2008-09-30 17:00:18.000000000 -0400
|
|
|
ec94db3 |
+++ grub-0.97/stage2/stage2.c 2008-09-30 17:00:58.000000000 -0400
|
|
|
ec94db3 |
@@ -258,14 +258,19 @@ restart:
|
|
|
ec94db3 |
interface. */
|
|
|
ec94db3 |
if (grub_timeout < 0)
|
|
|
ec94db3 |
show_menu = 1;
|
|
|
ec94db3 |
-
|
|
|
ec94db3 |
+
|
|
|
ec94db3 |
/* If SHOW_MENU is false, don't display the menu until ESC is pressed. */
|
|
|
ec94db3 |
if (! show_menu)
|
|
|
ec94db3 |
{
|
|
|
ec94db3 |
+ /* Don't show the "Booting in blah seconds message" if the timeout is 0 */
|
|
|
ec94db3 |
+ int print_message = grub_timeout != 0;
|
|
|
ec94db3 |
+
|
|
|
ec94db3 |
/* Get current time. */
|
|
|
ec94db3 |
while ((time1 = getrtsecs ()) == 0xFF)
|
|
|
ec94db3 |
;
|
|
|
ec94db3 |
- grub_verbose_printf("\rPress any key to enter the menu\n\n\n");
|
|
|
ec94db3 |
+
|
|
|
ec94db3 |
+ if (print_message)
|
|
|
ec94db3 |
+ grub_printf("\rPress any key to enter the menu\n\n\n");
|
|
|
ec94db3 |
|
|
|
ec94db3 |
while (1)
|
|
|
ec94db3 |
{
|
|
|
ec94db3 |
@@ -301,9 +306,10 @@ restart:
|
|
|
ec94db3 |
grub_timeout--;
|
|
|
ec94db3 |
|
|
|
ec94db3 |
/* Print a message. */
|
|
|
ec94db3 |
- grub_verbose_printf ("\rBooting %s in %d seconds...",
|
|
|
ec94db3 |
- get_entry(menu_entries, first_entry + entryno, 0),
|
|
|
ec94db3 |
- grub_timeout);
|
|
|
ec94db3 |
+ if (print_message)
|
|
|
ec94db3 |
+ grub_printf ("\rBooting %s in %d seconds...",
|
|
|
ec94db3 |
+ get_entry(menu_entries, first_entry + entryno, 0),
|
|
|
ec94db3 |
+ grub_timeout);
|
|
|
ec94db3 |
}
|
|
|
ec94db3 |
}
|
|
|
ec94db3 |
}
|