Hello,

Attached patch makes sleep -i 0 "interruptible".
It allows to have 0 sleep yet selectable multiboot config
i.e.

if sleep --interruptible 0 ; then                                      
  set timeout=0                                                        
fi   



-- 
Szymon K. Janc
szy...@janc.net.pl // GG: 1383435
--- grub_orig/grub2-1.98~experimental.20100111.1/commands/sleep.c	2010-01-11 20:01:15.000000000 +0100
+++ grub/grub2-1.98~experimental.20100111.1/commands/sleep.c	2010-01-18 20:37:56.107189595 +0100
@@ -44,19 +44,26 @@
   grub_printf ("%d    ", n);
 }
 
+static int
+do_check_key_press (void)
+{
+  return (grub_checkkey () >= 0
+      && GRUB_TERM_ASCII_CHAR (grub_getkey ()) == GRUB_TERM_ESC);
+}
+
 /* Based on grub_millisleep() from kern/generic/millisleep.c.  */
 static int
 grub_interruptible_millisleep (grub_uint32_t ms)
 {
   grub_uint64_t start;
-
   start = grub_get_time_ms ();
-
+  
   while (grub_get_time_ms () - start < ms)
-    if (grub_checkkey () >= 0 &&
-	GRUB_TERM_ASCII_CHAR (grub_getkey ()) == GRUB_TERM_ESC)
+  {
+    if (do_check_key_press ())
       return 1;
-
+  }
+  
   return 0;
 }
 
@@ -64,18 +71,20 @@
 grub_cmd_sleep (grub_extcmd_t cmd, int argc, char **args)
 {
   struct grub_arg_list *state = cmd->state;
-  int n;
+  unsigned long n;
 
   if (argc != 1)
     return grub_error (GRUB_ERR_BAD_ARGUMENT, "missing operand");
 
   n = grub_strtoul (args[0], 0, 10);
 
+  if (n == ~0UL)
+    return grub_error (GRUB_ERR_BAD_ARGUMENT, "incorrect value");
+
   if (n == 0)
-    {
-      /* Either `0' or broken input.  */
-      return 0;
-    }
+  {
+     return (state[1].set && do_check_key_press ());
+  }
 
   pos = grub_term_save_pos ();
 
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to