]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2009-06-11 Pavel Roskin <proski@gnu.org>
authorproski <proski@localhost>
Thu, 11 Jun 2009 16:17:45 +0000 (16:17 +0000)
committerproski <proski@localhost>
Thu, 11 Jun 2009 16:17:45 +0000 (16:17 +0000)
* term/i386/pc/serial.c (serial_translate_key_sequence): Avoid
casts to short - they are not portable and cause warnings.  Fix
use of uninitialized values in input_buf.  Use ARRAY_SIZE.

ChangeLog
term/i386/pc/serial.c

index f93ec8ca54398bcafaf9d0452c17115356928f80..29a50817f5c42baedc389dd9813501a9e3de9c2e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-06-11  Pavel Roskin  <proski@gnu.org>
+
+       * term/i386/pc/serial.c (serial_translate_key_sequence): Avoid
+       casts to short - they are not portable and cause warnings.  Fix
+       use of uninitialized values in input_buf.  Use ARRAY_SIZE.
+
 2009-06-11  Vladimir Serbinenko  <phcoder@gmail.com>
 
        Drivemap fixes
index 6105e223a83e43c40a5756b2d97bd9b69f7ce305..195f73670898b892137e5987ed858a398667c4c3 100644 (file)
@@ -112,6 +112,7 @@ serial_hw_put (const int c)
 static void
 serial_translate_key_sequence (void)
 {
+  unsigned int i;
   static struct
   {
     char key;
@@ -141,34 +142,27 @@ serial_translate_key_sequence (void)
       {('6' | ('~' << 8)), 3}
     };
 
-  /* The buffer must start with "ESC [".  */
-  if (*((unsigned short *) input_buf) != ('\e' | ('[' << 8)))
+  if (npending < 3)
     return;
 
-  if (npending >= 3)
-    {
-      unsigned int i;
+  /* The buffer must start with "ESC [".  */
+  if (input_buf[0] != '\e' || input_buf[1] != '[')
+    return;
 
-      for (i = 0;
-          i < sizeof (three_code_table) / sizeof (three_code_table[0]);
-          i++)
-       if (three_code_table[i].key == input_buf[2])
-         {
-           input_buf[0] = three_code_table[i].ascii;
-           npending -= 2;
-           grub_memmove (input_buf + 1, input_buf + 3, npending - 1);
-           return;
-         }
-    }
+  for (i = 0; ARRAY_SIZE (three_code_table); i++)
+    if (three_code_table[i].key == input_buf[2])
+      {
+       input_buf[0] = three_code_table[i].ascii;
+       npending -= 2;
+       grub_memmove (input_buf + 1, input_buf + 3, npending - 1);
+       return;
+      }
 
   if (npending >= 4)
     {
-      unsigned int i;
-      short key = *((short *) (input_buf + 2));
+      short key = input_buf[3] | (input_buf[4] << 8);
 
-      for (i = 0;
-          i < sizeof (four_code_table) / sizeof (four_code_table[0]);
-          i++)
+      for (i = 0; i < ARRAY_SIZE (four_code_table); i++)
        if (four_code_table[i].key == key)
          {
            input_buf[0] = four_code_table[i].ascii;