]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2008-05-16 Christian Franke <franke@computer.org>
authorchrfranke <chrfranke@localhost>
Fri, 16 May 2008 21:55:29 +0000 (21:55 +0000)
committerchrfranke <chrfranke@localhost>
Fri, 16 May 2008 21:55:29 +0000 (21:55 +0000)
* commands/cat.c (grub_cmd_cat): Remove non-ESC keys from keyboard queue
to ensure that break with ESC will always work.
* commands/sleep.c (grub_interruptible_millisleep): Likewise.
Remove ESC from keyboard queue.

ChangeLog
commands/cat.c
commands/sleep.c

index 0a0e521cf852f39ee59725b7f68b8fb47eed0ddb..c072ccd4cb7c3cbaf4b3c6e29ab7c97dcf02bc80 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-05-16  Christian Franke  <franke@computer.org>
+
+       * commands/cat.c (grub_cmd_cat): Remove non-ESC keys from keyboard queue
+       to ensure that break with ESC will always work.
+       * commands/sleep.c (grub_interruptible_millisleep): Likewise.
+       Remove ESC from keyboard queue.
+
 2008-05-16  Christian Franke  <franke@computer.org>
 
        * util/biosdisk.c: [__CYGWIN__] Add includes.
index 3a0d1f8fbd1b17597213872bf5e487408a0b5f1a..01fa3a4550be209982ea5392225ceaafb034aad2 100644 (file)
@@ -34,6 +34,7 @@ grub_cmd_cat (struct grub_arg_list *state __attribute__ ((unused)),
   grub_file_t file;
   char buf[GRUB_DISK_SECTOR_SIZE];
   grub_ssize_t size;
+  int key = 0;
 
   if (argc != 1)
     return grub_error (GRUB_ERR_BAD_ARGUMENT, "file name required");
@@ -42,7 +43,8 @@ grub_cmd_cat (struct grub_arg_list *state __attribute__ ((unused)),
   if (! file)
     return 0;
   
-  while ((size = grub_file_read (file, buf, sizeof (buf))) > 0)
+  while ((size = grub_file_read (file, buf, sizeof (buf))) > 0
+        && key != GRUB_TERM_ESC)
     {
       int i;
       
@@ -60,11 +62,9 @@ grub_cmd_cat (struct grub_arg_list *state __attribute__ ((unused)),
            }
        }
 
-      if (GRUB_TERM_ASCII_CHAR (grub_checkkey ()) == GRUB_TERM_ESC)
-       {
-         grub_getkey ();
-         break;
-       }
+      while (grub_checkkey () >= 0 &&
+            (key = GRUB_TERM_ASCII_CHAR (grub_getkey ())) != GRUB_TERM_ESC)
+       ;
     }
 
   grub_putchar ('\n');
index b239ef973e988d664c5b75abb5ebaaf8920925a8..c4744c57a88b27baa9ac79af2f6aac08e5b5e6f4 100644 (file)
@@ -52,7 +52,8 @@ grub_interruptible_millisleep (grub_uint32_t ms)
   end_at = grub_get_rtc () + grub_div_roundup (ms * GRUB_TICKS_PER_SECOND, 1000);
   
   while (grub_get_rtc () < end_at)
-    if (GRUB_TERM_ASCII_CHAR (grub_checkkey ()) == GRUB_TERM_ESC)
+    if (grub_checkkey () >= 0 &&
+       GRUB_TERM_ASCII_CHAR (grub_getkey ()) == GRUB_TERM_ESC)
       return 1;
 
   return 0;