From b7c6bed50edfd01cfe9de1eb3808d8eec4280777 Mon Sep 17 00:00:00 2001 From: chrfranke Date: Fri, 16 May 2008 21:55:29 +0000 Subject: [PATCH] 2008-05-16 Christian Franke * 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 | 7 +++++++ commands/cat.c | 12 ++++++------ commands/sleep.c | 3 ++- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0a0e521cf..c072ccd4c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-05-16 Christian Franke + + * 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 * util/biosdisk.c: [__CYGWIN__] Add includes. diff --git a/commands/cat.c b/commands/cat.c index 3a0d1f8fb..01fa3a455 100644 --- a/commands/cat.c +++ b/commands/cat.c @@ -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'); diff --git a/commands/sleep.c b/commands/sleep.c index b239ef973..c4744c57a 100644 --- a/commands/sleep.c +++ b/commands/sleep.c @@ -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;