]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2009-09-24 Robert Millan <rmh.grub@aybabtu.com>
authorrobertmh <robertmh@localhost>
Thu, 24 Sep 2009 13:25:07 +0000 (13:25 +0000)
committerrobertmh <robertmh@localhost>
Thu, 24 Sep 2009 13:25:07 +0000 (13:25 +0000)
        Fix "lost keypress" bug in at_keyboard.

        * term/i386/pc/at_keyboard.c (grub_at_keyboard_checkkey): New function.
        Checks for readyness of input buffer (without flushing it).
        (grub_at_keyboard_term): Use grub_at_keyboard_checkkey() rather
        than grub_at_keyboard_getkey_noblock() for `checkkey' struct member.

ChangeLog
term/i386/pc/at_keyboard.c

index 797b50874522a3b8e611b181b1d6daf7f7ce2eb2..1c29001a4c1eedb365125a8122c6cf79c7757af4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2009-09-24  Robert Millan  <rmh.grub@aybabtu.com>
+
+       Fix "lost keypress" bug in at_keyboard.
+
+       * term/i386/pc/at_keyboard.c (grub_at_keyboard_checkkey): New function.
+       Checks for readyness of input buffer (without flushing it).
+       (grub_at_keyboard_term): Use grub_at_keyboard_checkkey() rather
+       than grub_at_keyboard_getkey_noblock() for `checkkey' struct member.
+
 2009-09-24  Robert Millan  <rmh.grub@aybabtu.com>
 
        * util/i386/pc/grub-mkimage.c (generate_image): Enclose BIOS-specific
index 1ab41d8fdc9f6755dab6c3299f196d5425832d34..cf30e72427cf7515acbf417f05eb8ee77aae79a3 100644 (file)
@@ -189,6 +189,13 @@ grub_at_keyboard_getkey_noblock (void)
   return key;
 }
 
+static int
+grub_at_keyboard_checkkey (void)
+{
+  /* FIXME: this will be triggered by BREAK events.  */
+  return KEYBOARD_ISREADY (grub_inb (KEYBOARD_REG_STATUS)) ? 1 : -1;
+}
+
 static int
 grub_at_keyboard_getkey (void)
 {
@@ -220,8 +227,7 @@ static struct grub_term_input grub_at_keyboard_term =
     .name = "at_keyboard",
     .init = grub_keyboard_controller_init,
     .fini = grub_keyboard_controller_fini,
-    /* FIXME: This routine flushes input buffer, and it shouldn't.  */
-    .checkkey = grub_at_keyboard_getkey_noblock,
+    .checkkey = grub_at_keyboard_checkkey,
     .getkey = grub_at_keyboard_getkey,
   };