]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Console/TerminalDxe/Ansi.c
MdeModulePkg: Fix TerminalDxe FIFO Data Loss
[mirror_edk2.git] / MdeModulePkg / Universal / Console / TerminalDxe / Ansi.c
index c24108b51289bc0465e6af2efd56f7f159ee8b4d..4f84cc09ce9e39d99368d4fb53d16d1963d0c460 100644 (file)
@@ -1,79 +1,79 @@
-/** @file\r
-  Implementation of translation upon PC ANSI.\r
-\r
-Copyright (c) 2006 - 2008, Intel Corporation. <BR>\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution.  The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-\r
-#include "Terminal.h"\r
-\r
-/**\r
-  Translate all raw data in the Raw FIFO into unicode, and insert\r
-  them into Unicode FIFO.\r
-\r
-  @param TerminalDevice          The terminal device.\r
-\r
-**/\r
-VOID\r
-AnsiRawDataToUnicode (\r
-  IN  TERMINAL_DEV    *TerminalDevice\r
-  )\r
-{\r
-  UINT8 RawData;\r
-\r
-  //\r
-  // pop the raw data out from the raw fifo,\r
-  // and translate it into unicode, then push\r
-  // the unicode into unicode fifo, until the raw fifo is empty.\r
-  //\r
-  while (!IsRawFiFoEmpty (TerminalDevice)) {\r
-\r
-    RawFiFoRemoveOneKey (TerminalDevice, &RawData);\r
-\r
-    UnicodeFiFoInsertOneKey (TerminalDevice, (UINT16) RawData);\r
-  }\r
-}\r
-\r
-/**\r
-  Check if input string is valid Ascii string, valid EFI control characters\r
-  or valid text graphics.\r
-\r
-  @param  TerminalDevice          The terminal device.\r
-  @param  WString                 The input string.          \r
\r
-  @retval EFI_UNSUPPORTED         If not all input characters are valid.\r
-  @retval EFI_SUCCESS             If all input characters are valid.\r
-\r
-**/\r
-EFI_STATUS\r
-AnsiTestString (\r
-  IN  TERMINAL_DEV    *TerminalDevice,\r
-  IN  CHAR16          *WString\r
-  )\r
-{\r
-  CHAR8 GraphicChar;\r
-\r
-  //\r
-  // support three kind of character:\r
-  // valid ascii, valid efi control char, valid text graphics.\r
-  //\r
-  for (; *WString != CHAR_NULL; WString++) {\r
-\r
-    if ( !(TerminalIsValidAscii (*WString) ||\r
-        TerminalIsValidEfiCntlChar (*WString) ||\r
-        TerminalIsValidTextGraphics (*WString, &GraphicChar, NULL) )) {\r
-\r
-      return EFI_UNSUPPORTED;\r
-    }\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
+/** @file
+  Implementation of translation upon PC ANSI.
+
+Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
+This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution.  The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+
+#include "Terminal.h"
+
+/**
+  Translate all raw data in the Raw FIFO into unicode, and insert
+  them into Unicode FIFO.
+
+  @param TerminalDevice          The terminal device.
+
+**/
+VOID
+AnsiRawDataToUnicode (
+  IN  TERMINAL_DEV    *TerminalDevice
+  )
+{
+  UINT8 RawData;
+
+  //
+  // pop the raw data out from the raw fifo,
+  // and translate it into unicode, then push
+  // the unicode into unicode fifo, until the raw fifo is empty.
+  //
+  while (!IsRawFiFoEmpty (TerminalDevice) && !IsUnicodeFiFoFull(TerminalDevice) ) {
+
+    RawFiFoRemoveOneKey (TerminalDevice, &RawData);
+
+    UnicodeFiFoInsertOneKey (TerminalDevice, (UINT16) RawData);
+  }
+}
+
+/**
+  Check if input string is valid Ascii string, valid EFI control characters
+  or valid text graphics.
+
+  @param  TerminalDevice          The terminal device.
+  @param  WString                 The input string.          
+  @retval EFI_UNSUPPORTED         If not all input characters are valid.
+  @retval EFI_SUCCESS             If all input characters are valid.
+
+**/
+EFI_STATUS
+AnsiTestString (
+  IN  TERMINAL_DEV    *TerminalDevice,
+  IN  CHAR16          *WString
+  )
+{
+  CHAR8 GraphicChar;
+
+  //
+  // support three kind of character:
+  // valid ascii, valid efi control char, valid text graphics.
+  //
+  for (; *WString != CHAR_NULL; WString++) {
+
+    if ( !(TerminalIsValidAscii (*WString) ||
+        TerminalIsValidEfiCntlChar (*WString) ||
+        TerminalIsValidTextGraphics (*WString, &GraphicChar, NULL) )) {
+
+      return EFI_UNSUPPORTED;
+    }
+  }
+
+  return EFI_SUCCESS;
+}