Blame grub-chainloader-timeout.patch

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
     }