]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseLib/String.c
Refine code.
[mirror_edk2.git] / MdePkg / Library / BaseLib / String.c
index bdfa7a3c6d15c7756190ea42cbe104ed8af6ce05..273291a915b281ce1eebeaa611b63074da2a9a24 100644 (file)
@@ -1,24 +1,20 @@
 /** @file\r
   Unicode and ASCII string primatives.\r
 \r
-  Copyright (c) 2006 - 2007, Intel Corporation<BR>\r
-  All rights reserved. This program and the accompanying materials\r
+  Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  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
+  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 common header file for this module.\r
-//\r
-\r
-\r
 #include "BaseLibInternals.h"\r
 \r
+\r
 /**\r
   Copies one Null-terminated Unicode string to another Null-terminated Unicode\r
   string and returns the new Unicode string.\r
   If Source is not aligned on a 16-bit boundary, then ASSERT().\r
   If Source and Destination overlap, then ASSERT().\r
   If PcdMaximumUnicodeStringLength is not zero, and Source contains more than\r
-  PcdMaximumUnicodeStringLength Unicode characters not including the \r
+  PcdMaximumUnicodeStringLength Unicode characters, not including the\r
   Null-terminator, then ASSERT().\r
 \r
-  @param  Destination Pointer to a Null-terminated Unicode string.\r
-  @param  Source      Pointer to a Null-terminated Unicode string.\r
+  @param  Destination A pointer to a Null-terminated Unicode string.\r
+  @param  Source      A pointer to a Null-terminated Unicode string.\r
 \r
-  @return Destiantion\r
+  @return Destination.\r
 \r
 **/\r
 CHAR16 *\r
@@ -55,7 +51,7 @@ StrCpy (
   // Destination cannot be NULL\r
   //\r
   ASSERT (Destination != NULL);\r
-  ASSERT (((UINTN) Destination & 0x01) == 0);\r
+  ASSERT (((UINTN) Destination & BIT0) == 0);\r
 \r
   //\r
   // Destination and source cannot overlap\r
@@ -64,7 +60,7 @@ StrCpy (
   ASSERT ((UINTN)(Source - Destination) > StrLen (Source));\r
 \r
   ReturnValue = Destination;\r
-  while (*Source) {\r
+  while (*Source != 0) {\r
     *(Destination++) = *(Source++);\r
   }\r
   *Destination = 0;\r
@@ -72,9 +68,8 @@ StrCpy (
 }\r
 \r
 /**\r
-  Copies one Null-terminated Unicode string with a maximum length to another\r
-  Null-terminated Unicode string with a maximum length and returns the new\r
-  Unicode string.\r
+  Copies up to a specified length from one Null-terminated Unicode string  to \r
+  another Null-terminated Unicode string and returns the new Unicode string.\r
 \r
   This function copies the contents of the Unicode string Source to the Unicode\r
   string Destination, and returns Destination. At most, Length Unicode\r
@@ -87,17 +82,19 @@ StrCpy (
   If Length > 0 and Destination is NULL, then ASSERT().\r
   If Length > 0 and Destination is not aligned on a 16-bit boundary, then ASSERT().\r
   If Length > 0 and Source is NULL, then ASSERT().\r
-  If Length > 0 and Source is not aligned on a 16-bit bounadry, then ASSERT().\r
+  If Length > 0 and Source is not aligned on a 16-bit boundary, then ASSERT().\r
   If Source and Destination overlap, then ASSERT().\r
+  If PcdMaximumUnicodeStringLength is not zero, and Length is greater than \r
+  PcdMaximumUnicodeStringLength, then ASSERT().\r
   If PcdMaximumUnicodeStringLength is not zero, and Source contains more than\r
-  PcdMaximumUnicodeStringLength Unicode characters not including the \r
-  Null-terminator, then ASSERT().\r
+  PcdMaximumUnicodeStringLength Unicode characters, not including the Null-terminator,\r
+  then ASSERT().\r
 \r
-  @param  Destination Pointer to a Null-terminated Unicode string.\r
-  @param  Source      Pointer to a Null-terminated Unicode string.\r
-  @param  Length      Maximum number of Unicode characters to copy.\r
+  @param  Destination A pointer to a Null-terminated Unicode string.\r
+  @param  Source      A pointer to a Null-terminated Unicode string.\r
+  @param  Length      The maximum number of Unicode characters to copy.\r
 \r
-  @return Destination\r
+  @return Destination.\r
 \r
 **/\r
 CHAR16 *\r
@@ -118,15 +115,18 @@ StrnCpy (
   // Destination cannot be NULL if Length is not zero\r
   //\r
   ASSERT (Destination != NULL);\r
-  ASSERT (((UINTN) Destination & 0x01) == 0);\r
+  ASSERT (((UINTN) Destination & BIT0) == 0);\r
 \r
   //\r
   // Destination and source cannot overlap\r
-  // Q: Does Source have to be NULL-terminated?\r
   //\r
   ASSERT ((UINTN)(Destination - Source) > StrLen (Source));\r
   ASSERT ((UINTN)(Source - Destination) >= Length);\r
 \r
+  if (PcdGet32 (PcdMaximumUnicodeStringLength) != 0) {\r
+    ASSERT (Length <= PcdGet32 (PcdMaximumUnicodeStringLength));\r
+  }\r
+\r
   ReturnValue = Destination;\r
 \r
   while ((*Source != L'\0') && (Length > 0)) {\r
@@ -147,10 +147,10 @@ StrnCpy (
   If String is NULL, then ASSERT().\r
   If String is not aligned on a 16-bit boundary, then ASSERT().\r
   If PcdMaximumUnicodeStringLength is not zero, and String contains more than\r
-  PcdMaximumUnicodeStringLength Unicode characters not including the \r
+  PcdMaximumUnicodeStringLength Unicode characters, not including the\r
   Null-terminator, then ASSERT().\r
 \r
-  @param  String  Pointer to a Null-terminated Unicode string.\r
+  @param  String  A pointer to a Null-terminated Unicode string.\r
 \r
   @return The length of String.\r
 \r
@@ -164,7 +164,7 @@ StrLen (
   UINTN                             Length;\r
 \r
   ASSERT (String != NULL);\r
-  ASSERT (((UINTN) String & 0x01) == 0);\r
+  ASSERT (((UINTN) String & BIT0) == 0);\r
 \r
   for (Length = 0; *String != L'\0'; String++, Length++) {\r
     //\r
@@ -182,18 +182,18 @@ StrLen (
   Returns the size of a Null-terminated Unicode string in bytes, including the\r
   Null terminator.\r
 \r
-  This function returns the size, in bytes, of the Null-terminated Unicode\r
-  string specified by String.\r
+  This function returns the size, in bytes, of the Null-terminated Unicode string \r
+  specified by String.\r
 \r
   If String is NULL, then ASSERT().\r
   If String is not aligned on a 16-bit boundary, then ASSERT().\r
   If PcdMaximumUnicodeStringLength is not zero, and String contains more than\r
-  PcdMaximumUnicodeStringLength Unicode characters not including the \r
+  PcdMaximumUnicodeStringLength Unicode characters, not including the\r
   Null-terminator, then ASSERT().\r
 \r
-  @param  String  Pointer to a Null-terminated Unicode string.\r
+  @param  String  A pointer to a Null-terminated Unicode string.\r
 \r
-  @return The size in bytes of String.\r
+  @return The size of String.\r
 \r
 **/\r
 UINTN\r
@@ -220,17 +220,17 @@ StrSize (
   If SecondString is NULL, then ASSERT().\r
   If SecondString is not aligned on a 16-bit boundary, then ASSERT().\r
   If PcdMaximumUnicodeStringLength is not zero, and FirstString contains more\r
-  than PcdMaximumUnicodeStringLength Unicode characters not including the \r
+  than PcdMaximumUnicodeStringLength Unicode characters, not including the\r
   Null-terminator, then ASSERT().\r
   If PcdMaximumUnicodeStringLength is not zero, and SecondString contains more\r
-  than PcdMaximumUnicodeStringLength Unicode characters not including the \r
+  than PcdMaximumUnicodeStringLength Unicode characters, not including the\r
   Null-terminator, then ASSERT().\r
 \r
-  @param  FirstString   Pointer to a Null-terminated Unicode string.\r
-  @param  SecondString  Pointer to a Null-terminated Unicode string.\r
+  @param  FirstString   A pointer to a Null-terminated Unicode string.\r
+  @param  SecondString  A pointer to a Null-terminated Unicode string.\r
 \r
-  @retval 0   FirstString is identical to SecondString.\r
-  @retval !=0 FirstString is not identical to SecondString.\r
+  @retval 0      FirstString is identical to SecondString.\r
+  @return others FirstString is not identical to SecondString.\r
 \r
 **/\r
 INTN\r
@@ -254,9 +254,9 @@ StrCmp (
 }\r
 \r
 /**\r
-  Compares two Null-terminated Unicode strings with maximum lengths, and\r
-  returns the difference between the first mismatched Unicode characters.\r
-\r
+  Compares up to a specified length the contents of two Null-terminated Unicode strings,\r
+  and returns the difference between the first mismatched Unicode characters.\r
+  \r
   This function compares the Null-terminated Unicode string FirstString to the\r
   Null-terminated Unicode string SecondString. At most, Length Unicode\r
   characters will be compared. If Length is 0, then 0 is returned. If\r
@@ -265,22 +265,24 @@ StrCmp (
   subtracted from the first mismatched Unicode character in FirstString.\r
 \r
   If Length > 0 and FirstString is NULL, then ASSERT().\r
-  If Length > 0 and FirstString is not aligned on a 16-bit bounadary, then ASSERT().\r
+  If Length > 0 and FirstString is not aligned on a 16-bit boundary, then ASSERT().\r
   If Length > 0 and SecondString is NULL, then ASSERT().\r
-  If Length > 0 and SecondString is not aligned on a 16-bit bounadary, then ASSERT().\r
-  If PcdMaximumUnicodeStringLength is not zero, and FirstString contains more\r
-  than PcdMaximumUnicodeStringLength Unicode characters not including the\r
-  Null-terminator, then ASSERT().\r
-  If PcdMaximumUnicodeStringLength is not zero, and SecondString contains more\r
-  than PcdMaximumUnicodeStringLength Unicode characters not including the\r
-  Null-terminator, then ASSERT().\r
+  If Length > 0 and SecondString is not aligned on a 16-bit boundary, then ASSERT().\r
+  If PcdMaximumUnicodeStringLength is not zero, and Length is greater than\r
+  PcdMaximumUnicodeStringLength, then ASSERT().\r
+  If PcdMaximumUnicodeStringLength is not zero, and FirstString contains more than\r
+  PcdMaximumUnicodeStringLength Unicode characters, not including the Null-terminator,\r
+  then ASSERT().\r
+  If PcdMaximumUnicodeStringLength is not zero, and SecondString contains more than\r
+  PcdMaximumUnicodeStringLength Unicode characters, not including the Null-terminator,\r
+  then ASSERT().\r
 \r
-  @param  FirstString   Pointer to a Null-terminated Unicode string.\r
-  @param  SecondString  Pointer to a Null-terminated Unicode string.\r
-  @param  Length        Maximum number of Unicode characters to compare.\r
+  @param  FirstString   A pointer to a Null-terminated Unicode string.\r
+  @param  SecondString  A pointer to a Null-terminated Unicode string.\r
+  @param  Length        The maximum number of Unicode characters to compare.\r
 \r
-  @retval 0   FirstString is identical to SecondString.\r
-  @retval !=0 FirstString is not identical to SecondString.\r
+  @retval 0      FirstString is identical to SecondString.\r
+  @return others FirstString is not identical to SecondString.\r
 \r
 **/\r
 INTN\r
@@ -291,7 +293,7 @@ StrnCmp (
   IN      UINTN                     Length\r
   )\r
 {\r
-  if (0 == Length) {\r
+  if (Length == 0) {\r
     return 0;\r
   }\r
 \r
@@ -302,6 +304,10 @@ StrnCmp (
   ASSERT (StrSize (FirstString) != 0);\r
   ASSERT (StrSize (SecondString) != 0);\r
 \r
+  if (PcdGet32 (PcdMaximumUnicodeStringLength) != 0) {\r
+    ASSERT (Length <= PcdGet32 (PcdMaximumUnicodeStringLength));\r
+  }\r
+\r
   while ((*FirstString != L'\0') &&\r
          (*FirstString == *SecondString) &&\r
          (Length > 1)) {\r
@@ -324,23 +330,25 @@ StrnCmp (
   results are undefined.\r
 \r
   If Destination is NULL, then ASSERT().\r
+  If Destination is not aligned on a 16-bit boundary, then ASSERT().\r
   If Source is NULL, then ASSERT().\r
+  If Source is not aligned on a 16-bit boundary, then ASSERT().\r
   If Source and Destination overlap, then ASSERT().\r
   If PcdMaximumUnicodeStringLength is not zero, and Destination contains more\r
-  than PcdMaximumUnicodeStringLength Unicode characters not including the\r
+  than PcdMaximumUnicodeStringLength Unicode characters, not including the\r
   Null-terminator, then ASSERT().\r
   If PcdMaximumUnicodeStringLength is not zero, and Source contains more than\r
-  PcdMaximumUnicodeStringLength Unicode characters not including the\r
+  PcdMaximumUnicodeStringLength Unicode characters, not including the\r
   Null-terminator, then ASSERT().\r
   If PcdMaximumUnicodeStringLength is not zero, and concatenating Destination\r
   and Source results in a Unicode string with more than\r
-  PcdMaximumUnicodeStringLength Unicode characters not including the\r
+  PcdMaximumUnicodeStringLength Unicode characters, not including the\r
   Null-terminator, then ASSERT().\r
 \r
-  @param  Destination Pointer to a Null-terminated Unicode string.\r
-  @param  Source      Pointer to a Null-terminated Unicode string.\r
+  @param  Destination A pointer to a Null-terminated Unicode string.\r
+  @param  Source      A pointer to a Null-terminated Unicode string.\r
 \r
-  @return Destination\r
+  @return Destination.\r
 \r
 **/\r
 CHAR16 *\r
@@ -361,8 +369,8 @@ StrCat (
 }\r
 \r
 /**\r
-  Concatenates one Null-terminated Unicode string with a maximum length to the\r
-  end of another Null-terminated Unicode string, and returns the concatenated\r
+  Concatenates up to a specified length one Null-terminated Unicode to the end \r
+  of another Null-terminated Unicode string, and returns the concatenated \r
   Unicode string.\r
 \r
   This function concatenates two Null-terminated Unicode strings. The contents\r
@@ -378,23 +386,24 @@ StrCat (
   If Length > 0 and Source is NULL, then ASSERT().\r
   If Length > 0 and Source is not aligned on a 16-bit boundary, then ASSERT().\r
   If Source and Destination overlap, then ASSERT().\r
+  If PcdMaximumUnicodeStringLength is not zero, and Length is greater than \r
+  PcdMaximumUnicodeStringLength, then ASSERT().\r
   If PcdMaximumUnicodeStringLength is not zero, and Destination contains more\r
-  than PcdMaximumUnicodeStringLength Unicode characters not including the\r
+  than PcdMaximumUnicodeStringLength Unicode characters, not including the\r
   Null-terminator, then ASSERT().\r
   If PcdMaximumUnicodeStringLength is not zero, and Source contains more than\r
-  PcdMaximumUnicodeStringLength Unicode characters not including the\r
+  PcdMaximumUnicodeStringLength Unicode characters, not including the\r
   Null-terminator, then ASSERT().\r
   If PcdMaximumUnicodeStringLength is not zero, and concatenating Destination\r
-  and Source results in a Unicode string with more than\r
-  PcdMaximumUnicodeStringLength Unicode characters not including the\r
-  Null-terminator, then ASSERT().\r
+  and Source results in a Unicode string with more than PcdMaximumUnicodeStringLength\r
+  Unicode characters, not including the Null-terminator, then ASSERT().\r
 \r
-  @param  Destination Pointer to a Null-terminated Unicode string.\r
-  @param  Source      Pointer to a Null-terminated Unicode string.\r
-  @param  Length      Maximum number of Unicode characters to concatenate from\r
+  @param  Destination A pointer to a Null-terminated Unicode string.\r
+  @param  Source      A pointer to a Null-terminated Unicode string.\r
+  @param  Length      The maximum number of Unicode characters to concatenate from\r
                       Source.\r
 \r
-  @return Destination\r
+  @return Destination.\r
 \r
 **/\r
 CHAR16 *\r
@@ -405,7 +414,11 @@ StrnCat (
   IN      UINTN                     Length\r
   )\r
 {\r
-  StrnCpy (Destination + StrLen (Destination), Source, Length);\r
+  UINTN   DestinationLen;\r
+\r
+  DestinationLen = StrLen (Destination);\r
+  StrnCpy (Destination + DestinationLen, Source, Length);\r
+  Destination[DestinationLen + Length] = L'\0';\r
 \r
   //\r
   // Size of the resulting string should never be zero.\r
@@ -416,36 +429,36 @@ StrnCat (
 }\r
 \r
 /**\r
-  Returns the first occurance of a Null-terminated Unicode sub-string \r
+  Returns the first occurrence of a Null-terminated Unicode sub-string\r
   in a Null-terminated Unicode string.\r
 \r
-  This function scans the contents of the Null-terminated Unicode string \r
-  specified by String and returns the first occurrence of SearchString.  \r
-  If SearchString is not found in String, then NULL is returned.  If \r
-  the length of SearchString is zero, then String is \r
+  This function scans the contents of the Null-terminated Unicode string\r
+  specified by String and returns the first occurrence of SearchString.\r
+  If SearchString is not found in String, then NULL is returned.  If\r
+  the length of SearchString is zero, then String is\r
   returned.\r
-  \r
+\r
   If String is NULL, then ASSERT().\r
   If String is not aligned on a 16-bit boundary, then ASSERT().\r
   If SearchString is NULL, then ASSERT().\r
   If SearchString is not aligned on a 16-bit boundary, then ASSERT().\r
 \r
-  If PcdMaximumUnicodeStringLength is not zero, and SearchString \r
-  or String contains more than PcdMaximumUnicodeStringLength Unicode \r
-  characters not including the Null-terminator, then ASSERT().\r
+  If PcdMaximumUnicodeStringLength is not zero, and SearchString\r
+  or String contains more than PcdMaximumUnicodeStringLength Unicode\r
+  characters, not including the Null-terminator, then ASSERT().\r
 \r
-  @param  String                  Pointer to a Null-terminated Unicode string.\r
-  @param  SearchString  Pointer to a Null-terminated Unicode string to search for.\r
+  @param  String          A pointer to a Null-terminated Unicode string.\r
+  @param  SearchString    A pointer to a Null-terminated Unicode string to search for.\r
 \r
   @retval NULL            If the SearchString does not appear in String.\r
-  @retval !NULL           If there is a match.\r
+  @return others          If there is a match.\r
 \r
 **/\r
 CHAR16 *\r
 EFIAPI\r
 StrStr (\r
-  IN      CONST CHAR16                *String,\r
-  IN      CONST CHAR16                *SearchString\r
+  IN      CONST CHAR16              *String,\r
+  IN      CONST CHAR16              *SearchString\r
   )\r
 {\r
   CONST CHAR16 *FirstMatch;\r
@@ -458,29 +471,29 @@ StrStr (
   ASSERT (StrSize (String) != 0);\r
   ASSERT (StrSize (SearchString) != 0);\r
 \r
-  while (*String != '\0') {\r
+  if (*SearchString == L'\0') {\r
+    return (CHAR16 *) String;\r
+  }\r
+\r
+  while (*String != L'\0') {\r
     SearchStringTmp = SearchString;\r
     FirstMatch = String;\r
     \r
     while ((*String == *SearchStringTmp) \r
-            && (*SearchStringTmp != '\0') \r
-            && (*String != '\0')) {\r
+            && (*String != L'\0')) {\r
       String++;\r
       SearchStringTmp++;\r
     } \r
     \r
-    if ('\0' == *SearchStringTmp) {\r
+    if (*SearchStringTmp == L'\0') {\r
       return (CHAR16 *) FirstMatch;\r
     }\r
 \r
-    if (SearchStringTmp == SearchString) {\r
-      //\r
-      // If no character from SearchString match,\r
-      // move the pointer to the String under search\r
-      // by one character.\r
-      //\r
-      String++;\r
+    if (*String == L'\0') {\r
+      return NULL;\r
     }\r
+\r
+    String = FirstMatch + 1;\r
   }\r
 \r
   return NULL;\r
@@ -493,15 +506,14 @@ StrStr (
   decimal character. The valid decimal character is from\r
   L'0' to L'9'.\r
 \r
-\r
   @param  Char  The character to check against.\r
 \r
   @retval TRUE  If the Char is a decmial character.\r
-  @retval FALSE Otherwise.\r
+  @retval FALSE If the Char is not a decmial character.\r
 \r
 **/\r
-STATIC\r
 BOOLEAN\r
+EFIAPI\r
 InternalIsDecimalDigitCharacter (\r
   IN      CHAR16                    Char\r
   )\r
@@ -514,19 +526,18 @@ InternalIsDecimalDigitCharacter (
   it maps to a valid small-case ASCII character.\r
 \r
   This internal function only deal with Unicode character\r
-  which maps to a valid small-case ASII character, i.e.\r
+  which maps to a valid small-case ASCII character, i.e.\r
   L'a' to L'z'. For other Unicode character, the input character\r
   is returned directly.\r
 \r
-\r
   @param  Char  The character to convert.\r
 \r
   @retval LowerCharacter   If the Char is with range L'a' to L'z'.\r
   @retval Unchanged        Otherwise.\r
 \r
 **/\r
-STATIC\r
 CHAR16\r
+EFIAPI\r
 InternalCharToUpper (\r
   IN      CHAR16                    Char\r
   )\r
@@ -548,11 +559,11 @@ InternalCharToUpper (
 \r
   @param  Char  The character to convert.\r
 \r
-  @retval UINTN   The numerical value converted.\r
+  @return The numerical value converted.\r
 \r
 **/\r
-STATIC\r
 UINTN\r
+EFIAPI\r
 InternalHexCharToUintn (\r
   IN      CHAR16                    Char\r
   )\r
@@ -575,11 +586,11 @@ InternalHexCharToUintn (
   @param  Char  The character to check against.\r
 \r
   @retval TRUE  If the Char is a hexadecmial character.\r
-  @retval FALSE Otherwise.\r
+  @retval FALSE If the Char is not a hexadecmial character.\r
 \r
 **/\r
-STATIC\r
 BOOLEAN\r
+EFIAPI\r
 InternalIsHexaDecimalDigitCharacter (\r
   IN      CHAR16                    Char\r
   )\r
@@ -591,43 +602,43 @@ InternalIsHexaDecimalDigitCharacter (
 }\r
 \r
 /**\r
-  Convert a Null-terminated Unicode decimal string to a value of \r
+  Convert a Null-terminated Unicode decimal string to a value of\r
   type UINTN.\r
 \r
-  This function returns a value of type UINTN by interpreting the contents \r
-  of the Unicode string specified by String as a decimal number. The format \r
+  This function returns a value of type UINTN by interpreting the contents\r
+  of the Unicode string specified by String as a decimal number. The format\r
   of the input Unicode string String is:\r
-  \r
+\r
                   [spaces] [decimal digits].\r
-                  \r
-  The valid decimal digit character is in the range [0-9]. The \r
-  function will ignore the pad space, which includes spaces or \r
-  tab characters, before [decimal digits]. The running zero in the \r
-  beginning of [decimal digits] will be ignored. Then, the function \r
-  stops at the first character that is a not a valid decimal character \r
-  or a Null-terminator, whichever one comes first. \r
-  \r
+\r
+  The valid decimal digit character is in the range [0-9]. The\r
+  function will ignore the pad space, which includes spaces or\r
+  tab characters, before [decimal digits]. The running zero in the\r
+  beginning of [decimal digits] will be ignored. Then, the function\r
+  stops at the first character that is a not a valid decimal character\r
+  or a Null-terminator, whichever one comes first.\r
+\r
   If String is NULL, then ASSERT().\r
-  If String is not aligned in a 16-bit boundary, then ASSERT().  \r
+  If String is not aligned in a 16-bit boundary, then ASSERT().\r
   If String has only pad spaces, then 0 is returned.\r
-  If String has no pad spaces or valid decimal digits, \r
+  If String has no pad spaces or valid decimal digits,\r
   then 0 is returned.\r
-  If the number represented by String overflows according \r
+  If the number represented by String overflows according\r
   to the range defined by UINTN, then ASSERT().\r
-  \r
-  If PcdMaximumUnicodeStringLength is not zero, and String contains \r
-  more than PcdMaximumUnicodeStringLength Unicode characters not including \r
+\r
+  If PcdMaximumUnicodeStringLength is not zero, and String contains\r
+  more than PcdMaximumUnicodeStringLength Unicode characters, not including\r
   the Null-terminator, then ASSERT().\r
 \r
-  @param  String                Pointer to a Null-terminated Unicode string.\r
+  @param  String      A pointer to a Null-terminated Unicode string.\r
 \r
-  @retval UINTN           \r
+  @retval Value translated from String.\r
 \r
 **/\r
 UINTN\r
 EFIAPI\r
 StrDecimalToUintn (\r
-  IN      CONST CHAR16                *String\r
+  IN      CONST CHAR16              *String\r
   )\r
 {\r
   UINTN     Result;\r
@@ -641,14 +652,14 @@ StrDecimalToUintn (
   //\r
   // Ignore the pad spaces (space or tab)\r
   //\r
-  while ((L' ' ==*String) || (L'\t' == *String)) {\r
+  while ((*String == L' ') || (*String == L'\t')) {\r
     String++;\r
   }\r
 \r
   //\r
   // Ignore leading Zeros after the spaces\r
   //\r
-  while (L'0' == *String) {\r
+  while (*String == L'0') {\r
     String++;\r
   }\r
 \r
@@ -659,10 +670,7 @@ StrDecimalToUintn (
     // If the number represented by String overflows according \r
     // to the range defined by UINTN, then ASSERT().\r
     //\r
-    ASSERT ((Result < QUIENT_MAX_UINTN_DIVIDED_BY_10) ||\r
-      ((QUIENT_MAX_UINTN_DIVIDED_BY_10 == Result) &&\r
-      (*String - L'0') <= REMINDER_MAX_UINTN_DIVIDED_BY_10)\r
-      );\r
+    ASSERT (Result <= ((((UINTN) ~0) - (*String - L'0')) / 10));\r
 \r
     Result = Result * 10 + (*String - L'0');\r
     String++;\r
@@ -673,43 +681,43 @@ StrDecimalToUintn (
 \r
 \r
 /**\r
-  Convert a Null-terminated Unicode decimal string to a value of \r
+  Convert a Null-terminated Unicode decimal string to a value of\r
   type UINT64.\r
 \r
-  This function returns a value of type UINT64 by interpreting the contents \r
-  of the Unicode string specified by String as a decimal number. The format \r
+  This function returns a value of type UINT64 by interpreting the contents\r
+  of the Unicode string specified by String as a decimal number. The format\r
   of the input Unicode string String is:\r
-  \r
+\r
                   [spaces] [decimal digits].\r
-                  \r
-  The valid decimal digit character is in the range [0-9]. The \r
-  function will ignore the pad space, which includes spaces or \r
-  tab characters, before [decimal digits]. The running zero in the \r
-  beginning of [decimal digits] will be ignored. Then, the function \r
-  stops at the first character that is a not a valid decimal character \r
-  or a Null-terminator, whichever one comes first. \r
-  \r
+\r
+  The valid decimal digit character is in the range [0-9]. The\r
+  function will ignore the pad space, which includes spaces or\r
+  tab characters, before [decimal digits]. The running zero in the\r
+  beginning of [decimal digits] will be ignored. Then, the function\r
+  stops at the first character that is a not a valid decimal character\r
+  or a Null-terminator, whichever one comes first.\r
+\r
   If String is NULL, then ASSERT().\r
-  If String is not aligned in a 16-bit boundary, then ASSERT().  \r
+  If String is not aligned in a 16-bit boundary, then ASSERT().\r
   If String has only pad spaces, then 0 is returned.\r
-  If String has no pad spaces or valid decimal digits, \r
+  If String has no pad spaces or valid decimal digits,\r
   then 0 is returned.\r
-  If the number represented by String overflows according \r
+  If the number represented by String overflows according\r
   to the range defined by UINT64, then ASSERT().\r
-  \r
-  If PcdMaximumUnicodeStringLength is not zero, and String contains \r
-  more than PcdMaximumUnicodeStringLength Unicode characters not including \r
+\r
+  If PcdMaximumUnicodeStringLength is not zero, and String contains\r
+  more than PcdMaximumUnicodeStringLength Unicode characters, not including\r
   the Null-terminator, then ASSERT().\r
 \r
-  @param  String                Pointer to a Null-terminated Unicode string.\r
+  @param  String          A pointer to a Null-terminated Unicode string.\r
 \r
-  @retval UINT64           \r
+  @retval Value translated from String.\r
 \r
 **/\r
 UINT64\r
 EFIAPI\r
 StrDecimalToUint64 (\r
-  IN      CONST CHAR16                *String\r
+  IN      CONST CHAR16              *String\r
   )\r
 {\r
   UINT64     Result;\r
@@ -723,14 +731,14 @@ StrDecimalToUint64 (
   //\r
   // Ignore the pad spaces (space or tab)\r
   //\r
-  while ((L' ' == *String) || (L'\t' == *String)) {\r
+  while ((*String == L' ') || (*String == L'\t')) {\r
     String++;\r
   }\r
 \r
   //\r
   // Ignore leading Zeros after the spaces\r
   //\r
-  while (L'0' == *String) {\r
+  while (*String == L'0') {\r
     String++;\r
   }\r
 \r
@@ -741,10 +749,7 @@ StrDecimalToUint64 (
     // If the number represented by String overflows according \r
     // to the range defined by UINTN, then ASSERT().\r
     //\r
-    ASSERT ((Result < QUIENT_MAX_UINT64_DIVIDED_BY_10) || \r
-      ((QUIENT_MAX_UINT64_DIVIDED_BY_10 == Result) && \r
-      (*String - L'0') <= REMINDER_MAX_UINT64_DIVIDED_BY_10)\r
-      );\r
+    ASSERT (Result <= DivU64x32 (((UINT64) ~0) - (*String - L'0') , 10));\r
 \r
     Result = MultU64x32 (Result, 10) + (*String - L'0');\r
     String++;\r
@@ -756,42 +761,42 @@ StrDecimalToUint64 (
 /**\r
   Convert a Null-terminated Unicode hexadecimal string to a value of type UINTN.\r
 \r
-  This function returns a value of type UINTN by interpreting the contents \r
-  of the Unicode string specified by String as a hexadecimal number. \r
+  This function returns a value of type UINTN by interpreting the contents\r
+  of the Unicode string specified by String as a hexadecimal number.\r
   The format of the input Unicode string String is:\r
-  \r
-                  [spaces][zeros][x][hexadecimal digits]. \r
-\r
-  The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F]. \r
-  The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix. \r
-  If "x" appears in the input string, it must be prefixed with at least one 0. \r
-  The function will ignore the pad space, which includes spaces or tab characters, \r
-  before [zeros], [x] or [hexadecimal digit]. The running zero before [x] or \r
-  [hexadecimal digit] will be ignored. Then, the decoding starts after [x] or the \r
-  first valid hexadecimal digit. Then, the function stops at the first character that is \r
+\r
+                  [spaces][zeros][x][hexadecimal digits].\r
+\r
+  The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F].\r
+  The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix.\r
+  If "x" appears in the input string, it must be prefixed with at least one 0.\r
+  The function will ignore the pad space, which includes spaces or tab characters,\r
+  before [zeros], [x] or [hexadecimal digit]. The running zero before [x] or\r
+  [hexadecimal digit] will be ignored. Then, the decoding starts after [x] or the\r
+  first valid hexadecimal digit. Then, the function stops at the first character that is\r
   a not a valid hexadecimal character or NULL, whichever one comes first.\r
 \r
   If String is NULL, then ASSERT().\r
   If String is not aligned in a 16-bit boundary, then ASSERT().\r
   If String has only pad spaces, then zero is returned.\r
-  If String has no leading pad spaces, leading zeros or valid hexadecimal digits, \r
+  If String has no leading pad spaces, leading zeros or valid hexadecimal digits,\r
   then zero is returned.\r
-  If the number represented by String overflows according to the range defined by \r
+  If the number represented by String overflows according to the range defined by\r
   UINTN, then ASSERT().\r
 \r
-  If PcdMaximumUnicodeStringLength is not zero, and String contains more than \r
-  PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, \r
+  If PcdMaximumUnicodeStringLength is not zero, and String contains more than\r
+  PcdMaximumUnicodeStringLength Unicode characters, not including the Null-terminator,\r
   then ASSERT().\r
 \r
-  @param  String                Pointer to a Null-terminated Unicode string.\r
+  @param  String          A pointer to a Null-terminated Unicode string.\r
 \r
-  @retval UINTN\r
+  @retval Value translated from String.\r
 \r
 **/\r
 UINTN\r
 EFIAPI\r
 StrHexToUintn (\r
-  IN      CONST CHAR16                *String\r
+  IN      CONST CHAR16              *String\r
   )\r
 {\r
   UINTN     Result;\r
@@ -805,20 +810,19 @@ StrHexToUintn (
   //\r
   // Ignore the pad spaces (space or tab) \r
   //\r
-  while ((L' ' == *String) || (L'\t' == *String)) {\r
+  while ((*String == L' ') || (*String == L'\t')) {\r
     String++;\r
   }\r
 \r
   //\r
   // Ignore leading Zeros after the spaces\r
   //\r
-  while (L'0' == *String) {\r
+  while (*String == L'0') {\r
     String++;\r
   }\r
 \r
   if (InternalCharToUpper (*String) == L'X') {\r
-    ASSERT (L'0' == *(String - 1));\r
-    if (*(String - 1)  != L'0') {\r
+    if (*(String - 1) != L'0') {\r
       return 0;\r
     }\r
     //\r
@@ -834,10 +838,7 @@ StrHexToUintn (
     // If the Hex Number represented by String overflows according \r
     // to the range defined by UINTN, then ASSERT().\r
     //\r
-    ASSERT ((Result < QUIENT_MAX_UINTN_DIVIDED_BY_16) ||\r
-      ((QUIENT_MAX_UINTN_DIVIDED_BY_16 == Result) && \r
-      (InternalHexCharToUintn (*String) <= REMINDER_MAX_UINTN_DIVIDED_BY_16))\r
-      );\r
+    ASSERT (Result <= ((((UINTN) ~0) - InternalHexCharToUintn (*String)) >> 4));\r
 \r
     Result = (Result << 4) + InternalHexCharToUintn (*String);\r
     String++;\r
@@ -850,42 +851,42 @@ StrHexToUintn (
 /**\r
   Convert a Null-terminated Unicode hexadecimal string to a value of type UINT64.\r
 \r
-  This function returns a value of type UINT64 by interpreting the contents \r
-  of the Unicode string specified by String as a hexadecimal number. \r
-  The format of the input Unicode string String is \r
-  \r
-                  [spaces][zeros][x][hexadecimal digits]. \r
-\r
-  The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F]. \r
-  The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix. \r
-  If "x" appears in the input string, it must be prefixed with at least one 0. \r
-  The function will ignore the pad space, which includes spaces or tab characters, \r
-  before [zeros], [x] or [hexadecimal digit]. The running zero before [x] or \r
-  [hexadecimal digit] will be ignored. Then, the decoding starts after [x] or the \r
-  first valid hexadecimal digit. Then, the function stops at the first character that is \r
+  This function returns a value of type UINT64 by interpreting the contents\r
+  of the Unicode string specified by String as a hexadecimal number.\r
+  The format of the input Unicode string String is\r
+\r
+                  [spaces][zeros][x][hexadecimal digits].\r
+\r
+  The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F].\r
+  The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix.\r
+  If "x" appears in the input string, it must be prefixed with at least one 0.\r
+  The function will ignore the pad space, which includes spaces or tab characters,\r
+  before [zeros], [x] or [hexadecimal digit]. The running zero before [x] or\r
+  [hexadecimal digit] will be ignored. Then, the decoding starts after [x] or the\r
+  first valid hexadecimal digit. Then, the function stops at the first character that is\r
   a not a valid hexadecimal character or NULL, whichever one comes first.\r
 \r
   If String is NULL, then ASSERT().\r
   If String is not aligned in a 16-bit boundary, then ASSERT().\r
   If String has only pad spaces, then zero is returned.\r
-  If String has no leading pad spaces, leading zeros or valid hexadecimal digits, \r
+  If String has no leading pad spaces, leading zeros or valid hexadecimal digits,\r
   then zero is returned.\r
-  If the number represented by String overflows according to the range defined by \r
+  If the number represented by String overflows according to the range defined by\r
   UINT64, then ASSERT().\r
 \r
-  If PcdMaximumUnicodeStringLength is not zero, and String contains more than \r
-  PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, \r
+  If PcdMaximumUnicodeStringLength is not zero, and String contains more than\r
+  PcdMaximumUnicodeStringLength Unicode characters, not including the Null-terminator,\r
   then ASSERT().\r
 \r
-  @param  String                Pointer to a Null-terminated Unicode string.\r
+  @param  String          A pointer to a Null-terminated Unicode string.\r
 \r
-  @retval UINT64\r
+  @retval Value translated from String.\r
 \r
 **/\r
 UINT64\r
 EFIAPI\r
 StrHexToUint64 (\r
-  IN      CONST CHAR16                *String\r
+  IN      CONST CHAR16             *String\r
   )\r
 {\r
   UINT64    Result;\r
@@ -899,20 +900,20 @@ StrHexToUint64 (
   //\r
   // Ignore the pad spaces (space or tab) \r
   //\r
-  while ((L' ' == *String) || (L'\t' == *String)) {\r
+  while ((*String == L' ') || (*String == L'\t')) {\r
     String++;\r
   }\r
 \r
   //\r
   // Ignore leading Zeros after the spaces\r
   //\r
-  while (L'0' == *String) {\r
+  while (*String == L'0') {\r
     String++;\r
   }\r
 \r
   if (InternalCharToUpper (*String) == L'X') {\r
-    ASSERT (L'0' == *(String - 1));\r
-    if (*(String - 1)  != L'0') {\r
+    ASSERT (*(String - 1) == L'0');\r
+    if (*(String - 1) != L'0') {\r
       return 0;\r
     }\r
     //\r
@@ -928,10 +929,7 @@ StrHexToUint64 (
     // If the Hex Number represented by String overflows according \r
     // to the range defined by UINTN, then ASSERT().\r
     //\r
-    ASSERT ((Result < QUIENT_MAX_UINT64_DIVIDED_BY_16)|| \r
-      ((QUIENT_MAX_UINT64_DIVIDED_BY_16 == Result) && \r
-      (InternalHexCharToUintn (*String) <= REMINDER_MAX_UINT64_DIVIDED_BY_16))\r
-      );\r
+    ASSERT (Result <= RShiftU64 (((UINT64) ~0) - InternalHexCharToUintn (*String) , 4));\r
 \r
     Result = LShiftU64 (Result, 4);\r
     Result = Result + InternalHexCharToUintn (*String);\r
@@ -951,11 +949,11 @@ StrHexToUint64 (
   @param  Char  The character to check against.\r
 \r
   @retval TRUE  If the Char is a decmial character.\r
-  @retval FALSE Otherwise.\r
+  @retval FALSE If the Char is not a decmial character.\r
 \r
 **/\r
-STATIC\r
 BOOLEAN\r
+EFIAPI\r
 InternalAsciiIsDecimalDigitCharacter (\r
   IN      CHAR8                     Char\r
   )\r
@@ -974,11 +972,11 @@ InternalAsciiIsDecimalDigitCharacter (
   @param  Char  The character to check against.\r
 \r
   @retval TRUE  If the Char is a hexadecmial character.\r
-  @retval FALSE Otherwise.\r
+  @retval FALSE If the Char is not a hexadecmial character.\r
 \r
 **/\r
-STATIC\r
 BOOLEAN\r
+EFIAPI\r
 InternalAsciiIsHexaDecimalDigitCharacter (\r
   IN      CHAR8                    Char\r
   )\r
@@ -990,43 +988,40 @@ InternalAsciiIsHexaDecimalDigitCharacter (
 }\r
 \r
 /**\r
-  Convert a Null-terminated Unicode string to a Null-terminated \r
+  Convert a Null-terminated Unicode string to a Null-terminated\r
   ASCII string and returns the ASCII string.\r
-  \r
-  This function converts the content of the Unicode string Source \r
-  to the ASCII string Destination by copying the lower 8 bits of \r
-  each Unicode character. It returns Destination. The function terminates \r
-  the ASCII string Destination  by appending a Null-terminator character \r
-  at the end. The caller is responsible to make sure Destination points \r
-  to a buffer with size equal or greater than (StrLen (Source) + 1) in bytes.\r
+\r
+  This function converts the content of the Unicode string Source\r
+  to the ASCII string Destination by copying the lower 8 bits of\r
+  each Unicode character. It returns Destination.\r
+\r
+  If any Unicode characters in Source contain non-zero value in\r
+  the upper 8 bits, then ASSERT().\r
 \r
   If Destination is NULL, then ASSERT().\r
   If Source is NULL, then ASSERT().\r
   If Source is not aligned on a 16-bit boundary, then ASSERT().\r
   If Source and Destination overlap, then ASSERT().\r
 \r
-  If any Unicode characters in Source contain non-zero value in \r
-  the upper 8 bits, then ASSERT().\r
-  \r
-  If PcdMaximumUnicodeStringLength is not zero, and Source contains \r
-  more than PcdMaximumUnicodeStringLength Unicode characters not including \r
+  If PcdMaximumUnicodeStringLength is not zero, and Source contains\r
+  more than PcdMaximumUnicodeStringLength Unicode characters, not including\r
   the Null-terminator, then ASSERT().\r
-  \r
-  If PcdMaximumAsciiStringLength is not zero, and Source contains more \r
-  than PcdMaximumAsciiStringLength Unicode characters not including the \r
+\r
+  If PcdMaximumAsciiStringLength is not zero, and Source contains more\r
+  than PcdMaximumAsciiStringLength Unicode characters, not including the\r
   Null-terminator, then ASSERT().\r
 \r
-  @param  Source        Pointer to a Null-terminated Unicode string.\r
-  @param  Destination   Pointer to a Null-terminated ASCII string.\r
+  @param  Source        A pointer to a Null-terminated Unicode string.\r
+  @param  Destination   A pointer to a Null-terminated ASCII string.\r
 \r
-  @return Destination\r
+  @return Destination.\r
 \r
 **/\r
 CHAR8 *\r
 EFIAPI\r
 UnicodeStrToAsciiStr (\r
-  IN      CONST CHAR16                *Source,\r
-  OUT     CHAR8                       *Destination\r
+  IN      CONST CHAR16              *Source,\r
+  OUT     CHAR8                     *Destination\r
   )\r
 {\r
   CHAR8                               *ReturnValue;\r
@@ -1080,11 +1075,11 @@ UnicodeStrToAsciiStr (
   If Source is NULL, then ASSERT().\r
   If Source and Destination overlap, then ASSERT().\r
   If PcdMaximumAsciiStringLength is not zero and Source contains more than\r
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
+  PcdMaximumAsciiStringLength ASCII characters, not including the Null-terminator,\r
   then ASSERT().\r
 \r
-  @param  Destination Pointer to a Null-terminated ASCII string.\r
-  @param  Source      Pointer to a Null-terminated ASCII string.\r
+  @param  Destination A pointer to a Null-terminated ASCII string.\r
+  @param  Source      A pointer to a Null-terminated ASCII string.\r
 \r
   @return Destination\r
 \r
@@ -1110,7 +1105,7 @@ AsciiStrCpy (
   ASSERT ((UINTN)(Source - Destination) > AsciiStrLen (Source));\r
 \r
   ReturnValue = Destination;\r
-  while (*Source) {\r
+  while (*Source != 0) {\r
     *(Destination++) = *(Source++);\r
   }\r
   *Destination = 0;\r
@@ -1118,9 +1113,8 @@ AsciiStrCpy (
 }\r
 \r
 /**\r
-  Copies one Null-terminated ASCII string with a maximum length to another\r
-  Null-terminated ASCII string with a maximum length and returns the new ASCII\r
-  string.\r
+  Copies up to a specified length one Null-terminated ASCII string to another \r
+  Null-terminated ASCII string and returns the new ASCII string.\r
 \r
   This function copies the contents of the ASCII string Source to the ASCII\r
   string Destination, and returns Destination. At most, Length ASCII characters\r
@@ -1132,13 +1126,15 @@ AsciiStrCpy (
   If Destination is NULL, then ASSERT().\r
   If Source is NULL, then ASSERT().\r
   If Source and Destination overlap, then ASSERT().\r
+  If PcdMaximumAsciiStringLength is not zero, and Length is greater than \r
+  PcdMaximumAsciiStringLength, then ASSERT().\r
   If PcdMaximumAsciiStringLength is not zero, and Source contains more than\r
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
+  PcdMaximumAsciiStringLength ASCII characters, not including the Null-terminator,\r
   then ASSERT().\r
 \r
-  @param  Destination Pointer to a Null-terminated ASCII string.\r
-  @param  Source      Pointer to a Null-terminated ASCII string.\r
-  @param  Length      Maximum number of ASCII characters to copy.\r
+  @param  Destination A pointer to a Null-terminated ASCII string.\r
+  @param  Source      A pointer to a Null-terminated ASCII string.\r
+  @param  Length      The maximum number of ASCII characters to copy.\r
 \r
   @return Destination\r
 \r
@@ -1153,7 +1149,7 @@ AsciiStrnCpy (
 {\r
   CHAR8                             *ReturnValue;\r
 \r
-  if (0 == Length) {\r
+  if (Length == 0) {\r
     return Destination;\r
   }\r
 \r
@@ -1168,9 +1164,13 @@ AsciiStrnCpy (
   ASSERT ((UINTN)(Destination - Source) > AsciiStrLen (Source));\r
   ASSERT ((UINTN)(Source - Destination) >= Length);\r
 \r
+  if (PcdGet32 (PcdMaximumAsciiStringLength) != 0) {\r
+    ASSERT (Length <= PcdGet32 (PcdMaximumAsciiStringLength));\r
+  }\r
+\r
   ReturnValue = Destination;\r
 \r
-  while (*Source && Length > 0) {\r
+  while (*Source != 0 && Length > 0) {\r
     *(Destination++) = *(Source++);\r
     Length--;\r
   }\r
@@ -1185,12 +1185,13 @@ AsciiStrnCpy (
   This function returns the number of ASCII characters in the Null-terminated\r
   ASCII string specified by String.\r
 \r
-  If String is NULL, then ASSERT().\r
+  If Length > 0 and Destination is NULL, then ASSERT().\r
+  If Length > 0 and Source is NULL, then ASSERT().\r
   If PcdMaximumAsciiStringLength is not zero and String contains more than\r
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
+  PcdMaximumAsciiStringLength ASCII characters, not including the Null-terminator,\r
   then ASSERT().\r
 \r
-  @param  String  Pointer to a Null-terminated ASCII string.\r
+  @param  String  A pointer to a Null-terminated ASCII string.\r
 \r
   @return The length of String.\r
 \r
@@ -1226,10 +1227,10 @@ AsciiStrLen (
 \r
   If String is NULL, then ASSERT().\r
   If PcdMaximumAsciiStringLength is not zero and String contains more than\r
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
+  PcdMaximumAsciiStringLength ASCII characters, not including the Null-terminator,\r
   then ASSERT().\r
 \r
-  @param  String  Pointer to a Null-terminated ASCII string.\r
+  @param  String  A pointer to a Null-terminated ASCII string.\r
 \r
   @return The size of String.\r
 \r
@@ -1256,17 +1257,17 @@ AsciiStrSize (
   If FirstString is NULL, then ASSERT().\r
   If SecondString is NULL, then ASSERT().\r
   If PcdMaximumAsciiStringLength is not zero and FirstString contains more than\r
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
+  PcdMaximumAsciiStringLength ASCII characters, not including the Null-terminator,\r
   then ASSERT().\r
   If PcdMaximumAsciiStringLength is not zero and SecondString contains more\r
-  than PcdMaximumAsciiStringLength ASCII characters not including the\r
+  than PcdMaximumAsciiStringLength ASCII characters, not including the\r
   Null-terminator, then ASSERT().\r
 \r
-  @param  FirstString   Pointer to a Null-terminated ASCII string.\r
-  @param  SecondString  Pointer to a Null-terminated ASCII string.\r
+  @param  FirstString   A pointer to a Null-terminated ASCII string.\r
+  @param  SecondString  A pointer to a Null-terminated ASCII string.\r
 \r
-  @retval 0   FirstString is identical to SecondString.\r
-  @retval !=0 FirstString is not identical to SecondString.\r
+  @retval ==0      FirstString is identical to SecondString.\r
+  @retval !=0      FirstString is not identical to SecondString.\r
 \r
 **/\r
 INTN\r
@@ -1291,21 +1292,21 @@ AsciiStrCmp (
 }\r
 \r
 /**\r
-  Converts a lowercase Ascii character to upper one\r
+  Converts a lowercase Ascii character to upper one.\r
 \r
   If Chr is lowercase Ascii character, then converts it to upper one.\r
 \r
   If Value >= 0xA0, then ASSERT().\r
   If (Value & 0x0F) >= 0x0A, then ASSERT().\r
 \r
-  @param  chr   one Ascii character\r
+  @param  Chr   one Ascii character\r
 \r
   @return The uppercase value of Ascii character \r
 \r
 **/\r
-STATIC\r
 CHAR8\r
-AsciiToUpper (\r
+EFIAPI\r
+InternalBaseLibAsciiToUpper (\r
   IN      CHAR8                     Chr\r
   )\r
 {\r
@@ -1322,11 +1323,11 @@ AsciiToUpper (
 \r
   @param  Char  The character to convert.\r
 \r
-  @retval UINTN   The numerical value converted.\r
+  @return The numerical value converted.\r
 \r
 **/\r
-STATIC\r
 UINTN\r
+EFIAPI\r
 InternalAsciiHexCharToUintn (\r
   IN      CHAR8                    Char\r
   )\r
@@ -1335,7 +1336,7 @@ InternalAsciiHexCharToUintn (
     return Char - '0';\r
   }\r
 \r
-  return (UINTN) (10 + AsciiToUpper (Char) - 'A');\r
+  return (UINTN) (10 + InternalBaseLibAsciiToUpper (Char) - 'A');\r
 }\r
 \r
 \r
@@ -1353,19 +1354,19 @@ InternalAsciiHexCharToUintn (
   If FirstString is NULL, then ASSERT().\r
   If SecondString is NULL, then ASSERT().\r
   If PcdMaximumAsciiStringLength is not zero and FirstString contains more than\r
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
+  PcdMaximumAsciiStringLength ASCII characters, not including the Null-terminator,\r
   then ASSERT().\r
   If PcdMaximumAsciiStringLength is not zero and SecondString contains more\r
-  than PcdMaximumAsciiStringLength ASCII characters not including the\r
+  than PcdMaximumAsciiStringLength ASCII characters, not including the\r
   Null-terminator, then ASSERT().\r
 \r
-  @param  FirstString   Pointer to a Null-terminated ASCII string.\r
-  @param  SecondString  Pointer to a Null-terminated ASCII string.\r
+  @param  FirstString   A pointer to a Null-terminated ASCII string.\r
+  @param  SecondString  A pointer to a Null-terminated ASCII string.\r
 \r
-  @retval 0   FirstString is identical to SecondString using case insensitive\r
-              comparisons.\r
-  @retval !=0 FirstString is not identical to SecondString using case\r
-              insensitive comparisons.\r
+  @retval ==0    FirstString is identical to SecondString using case insensitive\r
+                 comparisons.\r
+  @retval !=0    FirstString is not identical to SecondString using case\r
+                 insensitive comparisons.\r
 \r
 **/\r
 INTN\r
@@ -1384,13 +1385,13 @@ AsciiStriCmp (
   ASSERT (AsciiStrSize (FirstString));\r
   ASSERT (AsciiStrSize (SecondString));\r
 \r
-  UpperFirstString  = AsciiToUpper (*FirstString);\r
-  UpperSecondString = AsciiToUpper (*SecondString);\r
+  UpperFirstString  = InternalBaseLibAsciiToUpper (*FirstString);\r
+  UpperSecondString = InternalBaseLibAsciiToUpper (*SecondString);\r
   while ((*FirstString != '\0') && (UpperFirstString == UpperSecondString)) {\r
     FirstString++;\r
     SecondString++;\r
-    UpperFirstString  = AsciiToUpper (*FirstString);\r
-    UpperSecondString = AsciiToUpper (*SecondString);\r
+    UpperFirstString  = InternalBaseLibAsciiToUpper (*FirstString);\r
+    UpperSecondString = InternalBaseLibAsciiToUpper (*SecondString);\r
   }\r
 \r
   return UpperFirstString - UpperSecondString;\r
@@ -1407,21 +1408,23 @@ AsciiStriCmp (
   is the first mismatched ASCII character in SecondString subtracted from the\r
   first mismatched ASCII character in FirstString.\r
 \r
-  If FirstString is NULL, then ASSERT().\r
-  If SecondString is NULL, then ASSERT().\r
-  If PcdMaximumAsciiStringLength is not zero and FirstString contains more than\r
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
+  If Length > 0 and FirstString is NULL, then ASSERT().\r
+  If Length > 0 and SecondString is NULL, then ASSERT().\r
+  If PcdMaximumAsciiStringLength is not zero, and Length is greater than \r
+  PcdMaximumAsciiStringLength, then ASSERT().\r
+  If PcdMaximumAsciiStringLength is not zero, and FirstString contains more than\r
+  PcdMaximumAsciiStringLength ASCII characters, not including the Null-terminator,\r
   then ASSERT().\r
-  If PcdMaximumAsciiStringLength is not zero and SecondString contains more than\r
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
+  If PcdMaximumAsciiStringLength is not zero, and SecondString contains more than\r
+  PcdMaximumAsciiStringLength ASCII characters, not including the Null-terminator,\r
   then ASSERT().\r
 \r
-  @param  FirstString   Pointer to a Null-terminated ASCII string.\r
-  @param  SecondString  Pointer to a Null-terminated ASCII string.\r
-  @param  Length        Maximum number of ASCII characters to compare.\r
-                        \r
-  @retval 0   FirstString is identical to SecondString.\r
-  @retval !=0 FirstString is not identical to SecondString.\r
+  @param  FirstString   A pointer to a Null-terminated ASCII string.\r
+  @param  SecondString  A pointer to a Null-terminated ASCII string.\r
+  @param  Length        The maximum number of ASCII characters for compare.\r
+  \r
+  @retval ==0       FirstString is identical to SecondString.\r
+  @retval !=0       FirstString is not identical to SecondString.\r
 \r
 **/\r
 INTN\r
@@ -1432,7 +1435,7 @@ AsciiStrnCmp (
   IN      UINTN                     Length\r
   )\r
 {\r
-  if (0 == Length) {\r
+  if (Length == 0) {\r
     return 0;\r
   }\r
 \r
@@ -1442,6 +1445,10 @@ AsciiStrnCmp (
   ASSERT (AsciiStrSize (FirstString));\r
   ASSERT (AsciiStrSize (SecondString));\r
 \r
+  if (PcdGet32 (PcdMaximumAsciiStringLength) != 0) {\r
+    ASSERT (Length <= PcdGet32 (PcdMaximumAsciiStringLength));\r
+  }\r
+\r
   while ((*FirstString != '\0') &&\r
          (*FirstString == *SecondString) &&\r
          (Length > 1)) {\r
@@ -1464,17 +1471,17 @@ AsciiStrnCmp (
   If Destination is NULL, then ASSERT().\r
   If Source is NULL, then ASSERT().\r
   If PcdMaximumAsciiStringLength is not zero and Destination contains more than\r
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
+  PcdMaximumAsciiStringLength ASCII characters, not including the Null-terminator,\r
   then ASSERT().\r
   If PcdMaximumAsciiStringLength is not zero and Source contains more than\r
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
+  PcdMaximumAsciiStringLength ASCII characters, not including the Null-terminator,\r
   then ASSERT().\r
   If PcdMaximumAsciiStringLength is not zero and concatenating Destination and\r
   Source results in a ASCII string with more than PcdMaximumAsciiStringLength\r
   ASCII characters, then ASSERT().\r
 \r
-  @param  Destination Pointer to a Null-terminated ASCII string.\r
-  @param  Source      Pointer to a Null-terminated ASCII string.\r
+  @param  Destination A pointer to a Null-terminated ASCII string.\r
+  @param  Source      A pointer to a Null-terminated ASCII string.\r
 \r
   @return Destination\r
 \r
@@ -1497,9 +1504,9 @@ AsciiStrCat (
 }\r
 \r
 /**\r
-  Concatenates one Null-terminated ASCII string with a maximum length to the\r
-  end of another Null-terminated ASCII string, and returns the concatenated\r
-  ASCII string.\r
+  Concatenates up to a specified length one Null-terminated ASCII string to \r
+  the end of another Null-terminated ASCII string, and returns the \r
+  concatenated ASCII string.\r
 \r
   This function concatenates two Null-terminated ASCII strings. The contents\r
   of Null-terminated ASCII string Source are concatenated to the end of Null-\r
@@ -1509,22 +1516,24 @@ AsciiStrCat (
   Destination is returned unmodified. If Source and Destination overlap, then\r
   the results are undefined.\r
 \r
-  If Destination is NULL, then ASSERT().\r
-  If Source is NULL, then ASSERT().\r
+  If Length > 0 and Destination is NULL, then ASSERT().\r
+  If Length > 0 and Source is NULL, then ASSERT().\r
   If Source and Destination overlap, then ASSERT().\r
+  If PcdMaximumAsciiStringLength is not zero, and Length is greater than\r
+  PcdMaximumAsciiStringLength, then ASSERT().\r
   If PcdMaximumAsciiStringLength is not zero, and Destination contains more than\r
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
+  PcdMaximumAsciiStringLength ASCII characters, not including the Null-terminator,\r
   then ASSERT().\r
   If PcdMaximumAsciiStringLength is not zero, and Source contains more than\r
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
+  PcdMaximumAsciiStringLength ASCII characters, not including the Null-terminator,\r
   then ASSERT().\r
   If PcdMaximumAsciiStringLength is not zero, and concatenating Destination and\r
   Source results in a ASCII string with more than PcdMaximumAsciiStringLength\r
-  ASCII characters not including the Null-terminator, then ASSERT().\r
+  ASCII characters, not including the Null-terminator, then ASSERT().\r
 \r
-  @param  Destination Pointer to a Null-terminated ASCII string.\r
-  @param  Source      Pointer to a Null-terminated ASCII string.\r
-  @param  Length      Maximum number of ASCII characters to concatenate from\r
+  @param  Destination A pointer to a Null-terminated ASCII string.\r
+  @param  Source      A pointer to a Null-terminated ASCII string.\r
+  @param  Length      The maximum number of ASCII characters to concatenate from\r
                       Source.\r
 \r
   @return Destination\r
@@ -1538,7 +1547,11 @@ AsciiStrnCat (
   IN      UINTN                     Length\r
   )\r
 {\r
-  AsciiStrnCpy (Destination + AsciiStrLen (Destination), Source, Length);\r
+  UINTN   DestinationLen;\r
+\r
+  DestinationLen = AsciiStrLen (Destination);\r
+  AsciiStrnCpy (Destination + DestinationLen, Source, Length);\r
+  Destination[DestinationLen + Length] = '\0';\r
 \r
   //\r
   // Size of the resulting string should never be zero.\r
@@ -1549,33 +1562,34 @@ AsciiStrnCat (
 }\r
 \r
 /**\r
-  Returns the first occurance of a Null-terminated ASCII sub-string \r
+  Returns the first occurrence of a Null-terminated ASCII sub-string\r
   in a Null-terminated ASCII string.\r
 \r
-  This function scans the contents of the ASCII string specified by String \r
-  and returns the first occurrence of SearchString. If SearchString is not \r
-  found in String, then NULL is returned. If the length of SearchString is zero, \r
+  This function scans the contents of the ASCII string specified by String\r
+  and returns the first occurrence of SearchString. If SearchString is not\r
+  found in String, then NULL is returned. If the length of SearchString is zero,\r
   then String is returned.\r
-  \r
+\r
   If String is NULL, then ASSERT().\r
   If SearchString is NULL, then ASSERT().\r
 \r
-  If PcdMaximumAsciiStringLength is not zero, and SearchString or \r
-  String contains more than PcdMaximumAsciiStringLength Unicode characters \r
+  If PcdMaximumAsciiStringLength is not zero, and SearchString or\r
+  String contains more than PcdMaximumAsciiStringLength Unicode characters\r
   not including the Null-terminator, then ASSERT().\r
 \r
-  @param  String          Pointer to a Null-terminated ASCII string.\r
-  @param  SearchString    Pointer to a Null-terminated ASCII string to search for.\r
+  @param  String          A pointer to a Null-terminated ASCII string.\r
+  @param  SearchString    A pointer to a Null-terminated ASCII string to search for.\r
 \r
   @retval NULL            If the SearchString does not appear in String.\r
-  @retval !NULL           If there is a match.\r
+  @retval others          If there is a match return the first occurrence of SearchingString.\r
+                          If the length of SearchString is zero,return String.\r
 \r
 **/\r
 CHAR8 *\r
 EFIAPI\r
 AsciiStrStr (\r
-  IN      CONST CHAR8             *String,\r
-  IN      CONST CHAR8             *SearchString\r
+  IN      CONST CHAR8               *String,\r
+  IN      CONST CHAR8               *SearchString\r
   )\r
 {\r
   CONST CHAR8 *FirstMatch;\r
@@ -1587,12 +1601,15 @@ AsciiStrStr (
   ASSERT (AsciiStrSize (String) != 0);\r
   ASSERT (AsciiStrSize (SearchString) != 0);\r
 \r
+  if (*SearchString == '\0') {\r
+    return (CHAR8 *) String;\r
+  }\r
+\r
   while (*String != '\0') {\r
     SearchStringTmp = SearchString;\r
     FirstMatch = String;\r
     \r
     while ((*String == *SearchStringTmp) \r
-            && (*SearchStringTmp != '\0') \r
             && (*String != '\0')) {\r
       String++;\r
       SearchStringTmp++;\r
@@ -1602,48 +1619,44 @@ AsciiStrStr (
       return (CHAR8 *) FirstMatch;\r
     }\r
 \r
-    if (SearchStringTmp == SearchString) {\r
-      //\r
-      // If no character from SearchString match,\r
-      // move the pointer to the String under search\r
-      // by one character.\r
-      //\r
-      String++;\r
+    if (*String == '\0') {\r
+      return NULL;\r
     }\r
 \r
+    String = FirstMatch + 1;\r
   }\r
 \r
   return NULL;\r
 }\r
 \r
 /**\r
-  Convert a Null-terminated ASCII decimal string to a value of type \r
+  Convert a Null-terminated ASCII decimal string to a value of type\r
   UINTN.\r
 \r
-  This function returns a value of type UINTN by interpreting the contents \r
-  of the ASCII string String as a decimal number. The format of the input \r
+  This function returns a value of type UINTN by interpreting the contents\r
+  of the ASCII string String as a decimal number. The format of the input\r
   ASCII string String is:\r
-  \r
+\r
                     [spaces] [decimal digits].\r
-  \r
-  The valid decimal digit character is in the range [0-9]. The function will \r
-  ignore the pad space, which includes spaces or tab characters, before the digits. \r
-  The running zero in the beginning of [decimal digits] will be ignored. Then, the \r
-  function stops at the first character that is a not a valid decimal character or \r
+\r
+  The valid decimal digit character is in the range [0-9]. The function will\r
+  ignore the pad space, which includes spaces or tab characters, before the digits.\r
+  The running zero in the beginning of [decimal digits] will be ignored. Then, the\r
+  function stops at the first character that is a not a valid decimal character or\r
   Null-terminator, whichever on comes first.\r
-  \r
+\r
   If String has only pad spaces, then 0 is returned.\r
   If String has no pad spaces or valid decimal digits, then 0 is returned.\r
-  If the number represented by String overflows according to the range defined by \r
+  If the number represented by String overflows according to the range defined by\r
   UINTN, then ASSERT().\r
   If String is NULL, then ASSERT().\r
-  If PcdMaximumAsciiStringLength is not zero, and String contains more than \r
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator, \r
+  If PcdMaximumAsciiStringLength is not zero, and String contains more than\r
+  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
   then ASSERT().\r
 \r
-  @param  String                Pointer to a Null-terminated ASCII string.\r
+  @param  String          A pointer to a Null-terminated ASCII string.\r
 \r
-  @retval UINTN           \r
+  @retval Value translated from String.\r
 \r
 **/\r
 UINTN\r
@@ -1662,14 +1675,14 @@ AsciiStrDecimalToUintn (
   //\r
   // Ignore the pad spaces (space or tab)\r
   //\r
-  while ((' ' == *String) || ('\t' == *String)) {\r
+  while ((*String == ' ') || (*String == '\t' )) {\r
     String++;\r
   }\r
 \r
   //\r
   // Ignore leading Zeros after the spaces\r
   //\r
-  while ('0' == *String) {\r
+  while (*String == '0') {\r
     String++;\r
   }\r
 \r
@@ -1680,10 +1693,7 @@ AsciiStrDecimalToUintn (
     // If the number represented by String overflows according \r
     // to the range defined by UINTN, then ASSERT().\r
     //\r
-    ASSERT ((Result < QUIENT_MAX_UINTN_DIVIDED_BY_10) ||\r
-      ((QUIENT_MAX_UINTN_DIVIDED_BY_10 == Result) && \r
-      (*String - '0') <= REMINDER_MAX_UINTN_DIVIDED_BY_10)\r
-      );\r
+    ASSERT (Result <= ((((UINTN) ~0) - (*String - L'0')) / 10));\r
 \r
     Result = Result * 10 + (*String - '0');\r
     String++;\r
@@ -1694,39 +1704,39 @@ AsciiStrDecimalToUintn (
 \r
 \r
 /**\r
-  Convert a Null-terminated ASCII decimal string to a value of type \r
+  Convert a Null-terminated ASCII decimal string to a value of type\r
   UINT64.\r
 \r
-  This function returns a value of type UINT64 by interpreting the contents \r
-  of the ASCII string String as a decimal number. The format of the input \r
+  This function returns a value of type UINT64 by interpreting the contents\r
+  of the ASCII string String as a decimal number. The format of the input\r
   ASCII string String is:\r
-  \r
+\r
                     [spaces] [decimal digits].\r
-  \r
-  The valid decimal digit character is in the range [0-9]. The function will \r
-  ignore the pad space, which includes spaces or tab characters, before the digits. \r
-  The running zero in the beginning of [decimal digits] will be ignored. Then, the \r
-  function stops at the first character that is a not a valid decimal character or \r
+\r
+  The valid decimal digit character is in the range [0-9]. The function will\r
+  ignore the pad space, which includes spaces or tab characters, before the digits.\r
+  The running zero in the beginning of [decimal digits] will be ignored. Then, the\r
+  function stops at the first character that is a not a valid decimal character or\r
   Null-terminator, whichever on comes first.\r
-  \r
+\r
   If String has only pad spaces, then 0 is returned.\r
   If String has no pad spaces or valid decimal digits, then 0 is returned.\r
-  If the number represented by String overflows according to the range defined by \r
+  If the number represented by String overflows according to the range defined by\r
   UINT64, then ASSERT().\r
   If String is NULL, then ASSERT().\r
-  If PcdMaximumAsciiStringLength is not zero, and String contains more than \r
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator, \r
+  If PcdMaximumAsciiStringLength is not zero, and String contains more than\r
+  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
   then ASSERT().\r
 \r
-  @param  String                Pointer to a Null-terminated ASCII string.\r
+  @param  String          A pointer to a Null-terminated ASCII string.\r
 \r
-  @retval UINT64           \r
+  @retval Value translated from String.\r
 \r
 **/\r
 UINT64\r
 EFIAPI\r
 AsciiStrDecimalToUint64 (\r
-  IN      CONST CHAR8             *String\r
+  IN      CONST CHAR8               *String\r
   )\r
 {\r
   UINT64     Result;\r
@@ -1739,14 +1749,14 @@ AsciiStrDecimalToUint64 (
   //\r
   // Ignore the pad spaces (space or tab)\r
   //\r
-  while ((' ' == *String) || ('\t' == *String)) {\r
+  while ((*String == ' ') || (*String == '\t' )) {\r
     String++;\r
   }\r
 \r
   //\r
   // Ignore leading Zeros after the spaces\r
   //\r
-  while ('0' == *String) {\r
+  while (*String == '0') {\r
     String++;\r
   }\r
 \r
@@ -1757,10 +1767,7 @@ AsciiStrDecimalToUint64 (
     // If the number represented by String overflows according \r
     // to the range defined by UINTN, then ASSERT().\r
     //\r
-    ASSERT ((Result < QUIENT_MAX_UINT64_DIVIDED_BY_10) || \r
-      ((QUIENT_MAX_UINT64_DIVIDED_BY_10 == Result) && \r
-      (*String - '0') <= REMINDER_MAX_UINT64_DIVIDED_BY_10)\r
-      );\r
+    ASSERT (Result <= DivU64x32 (((UINT64) ~0) - (*String - L'0') , 10));\r
 \r
     Result = MultU64x32 (Result, 10) + (*String - '0');\r
     String++;\r
@@ -1772,41 +1779,41 @@ AsciiStrDecimalToUint64 (
 /**\r
   Convert a Null-terminated ASCII hexadecimal string to a value of type UINTN.\r
 \r
-  This function returns a value of type UINTN by interpreting the contents of \r
-  the ASCII string String as a hexadecimal number. The format of the input ASCII \r
+  This function returns a value of type UINTN by interpreting the contents of\r
+  the ASCII string String as a hexadecimal number. The format of the input ASCII\r
   string String is:\r
-  \r
+\r
                   [spaces][zeros][x][hexadecimal digits].\r
-                  \r
-  The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F]. \r
-  The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix. If "x" \r
-  appears in the input string, it must be prefixed with at least one 0. The function \r
-  will ignore the pad space, which includes spaces or tab characters, before [zeros], \r
-  [x] or [hexadecimal digits]. The running zero before [x] or [hexadecimal digits] \r
-  will be ignored. Then, the decoding starts after [x] or the first valid hexadecimal \r
-  digit. Then, the function stops at the first character that is a not a valid \r
+\r
+  The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F].\r
+  The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix. If "x"\r
+  appears in the input string, it must be prefixed with at least one 0. The function\r
+  will ignore the pad space, which includes spaces or tab characters, before [zeros],\r
+  [x] or [hexadecimal digits]. The running zero before [x] or [hexadecimal digits]\r
+  will be ignored. Then, the decoding starts after [x] or the first valid hexadecimal\r
+  digit. Then, the function stops at the first character that is a not a valid\r
   hexadecimal character or Null-terminator, whichever on comes first.\r
-  \r
+\r
   If String has only pad spaces, then 0 is returned.\r
   If String has no leading pad spaces, leading zeros or valid hexadecimal digits, then\r
   0 is returned.\r
 \r
-  If the number represented by String overflows according to the range defined by UINTN, \r
+  If the number represented by String overflows according to the range defined by UINTN,\r
   then ASSERT().\r
   If String is NULL, then ASSERT().\r
-  If PcdMaximumAsciiStringLength is not zero, \r
-  and String contains more than PcdMaximumAsciiStringLength ASCII characters not including \r
+  If PcdMaximumAsciiStringLength is not zero,\r
+  and String contains more than PcdMaximumAsciiStringLength ASCII characters not including\r
   the Null-terminator, then ASSERT().\r
 \r
-  @param  String                Pointer to a Null-terminated ASCII string.\r
+  @param  String          A pointer to a Null-terminated ASCII string.\r
 \r
-  @retval UINTN\r
+  @retval Value translated from String.\r
 \r
 **/\r
 UINTN\r
 EFIAPI\r
 AsciiStrHexToUintn (\r
-  IN      CONST CHAR8             *String\r
+  IN      CONST CHAR8               *String\r
   )\r
 {\r
   UINTN     Result;\r
@@ -1819,20 +1826,20 @@ AsciiStrHexToUintn (
   //\r
   // Ignore the pad spaces (space or tab) \r
   //\r
-  while ((' ' == *String) || ('\t' == *String)) {\r
+  while ((*String == ' ') || (*String == '\t' )) {\r
     String++;\r
   }\r
 \r
   //\r
   // Ignore leading Zeros after the spaces\r
   //\r
-  while ('0' == *String) {\r
+  while (*String == '0') {\r
     String++;\r
   }\r
 \r
-  if (AsciiToUpper (*String) == 'X') {\r
-    ASSERT ('0' == *(String - 1));\r
-    if (*(String - 1)  != '0') {\r
+  if (InternalBaseLibAsciiToUpper (*String) == 'X') {\r
+    ASSERT (*(String - 1) == '0');\r
+    if (*(String - 1) != '0') {\r
       return 0;\r
     }\r
     //\r
@@ -1848,10 +1855,7 @@ AsciiStrHexToUintn (
     // If the Hex Number represented by String overflows according \r
     // to the range defined by UINTN, then ASSERT().\r
     //\r
-     ASSERT ((Result < QUIENT_MAX_UINTN_DIVIDED_BY_16) ||\r
-       ((QUIENT_MAX_UINTN_DIVIDED_BY_16 == Result) && \r
-       (InternalAsciiHexCharToUintn (*String) <= REMINDER_MAX_UINTN_DIVIDED_BY_16))\r
-       );\r
+    ASSERT (Result <= ((((UINTN) ~0) - InternalHexCharToUintn (*String)) >> 4));\r
 \r
     Result = (Result << 4) + InternalAsciiHexCharToUintn (*String);\r
     String++;\r
@@ -1864,41 +1868,41 @@ AsciiStrHexToUintn (
 /**\r
   Convert a Null-terminated ASCII hexadecimal string to a value of type UINT64.\r
 \r
-  This function returns a value of type UINT64 by interpreting the contents of \r
-  the ASCII string String as a hexadecimal number. The format of the input ASCII \r
+  This function returns a value of type UINT64 by interpreting the contents of\r
+  the ASCII string String as a hexadecimal number. The format of the input ASCII\r
   string String is:\r
-  \r
+\r
                   [spaces][zeros][x][hexadecimal digits].\r
-                  \r
-  The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F]. \r
-  The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix. If "x" \r
-  appears in the input string, it must be prefixed with at least one 0. The function \r
-  will ignore the pad space, which includes spaces or tab characters, before [zeros], \r
-  [x] or [hexadecimal digits]. The running zero before [x] or [hexadecimal digits] \r
-  will be ignored. Then, the decoding starts after [x] or the first valid hexadecimal \r
-  digit. Then, the function stops at the first character that is a not a valid \r
+\r
+  The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F].\r
+  The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix. If "x"\r
+  appears in the input string, it must be prefixed with at least one 0. The function\r
+  will ignore the pad space, which includes spaces or tab characters, before [zeros],\r
+  [x] or [hexadecimal digits]. The running zero before [x] or [hexadecimal digits]\r
+  will be ignored. Then, the decoding starts after [x] or the first valid hexadecimal\r
+  digit. Then, the function stops at the first character that is a not a valid\r
   hexadecimal character or Null-terminator, whichever on comes first.\r
-  \r
+\r
   If String has only pad spaces, then 0 is returned.\r
   If String has no leading pad spaces, leading zeros or valid hexadecimal digits, then\r
   0 is returned.\r
 \r
-  If the number represented by String overflows according to the range defined by UINT64, \r
+  If the number represented by String overflows according to the range defined by UINT64,\r
   then ASSERT().\r
   If String is NULL, then ASSERT().\r
-  If PcdMaximumAsciiStringLength is not zero, \r
-  and String contains more than PcdMaximumAsciiStringLength ASCII characters not including \r
+  If PcdMaximumAsciiStringLength is not zero,\r
+  and String contains more than PcdMaximumAsciiStringLength ASCII characters not including\r
   the Null-terminator, then ASSERT().\r
 \r
-  @param  String                Pointer to a Null-terminated ASCII string.\r
+  @param  String          A pointer to a Null-terminated ASCII string.\r
 \r
-  @retval UINT64\r
+  @retval Value translated from String.\r
 \r
 **/\r
 UINT64\r
 EFIAPI\r
 AsciiStrHexToUint64 (\r
-  IN      CONST CHAR8             *String\r
+  IN      CONST CHAR8                *String\r
   )\r
 {\r
   UINT64    Result;\r
@@ -1914,20 +1918,20 @@ AsciiStrHexToUint64 (
   //\r
   // Ignore the pad spaces (space or tab) \r
   //\r
-  while ((' ' == *String) || ('\t' == *String)) {\r
+  while ((*String == ' ') || (*String == '\t' )) {\r
     String++;\r
   }\r
 \r
   //\r
   // Ignore leading Zeros after the spaces\r
   //\r
-  while ('0' == *String) {\r
+  while (*String == '0') {\r
     String++;\r
   }\r
 \r
-  if (AsciiToUpper (*String) == 'X') {\r
-    ASSERT ('0' == *(String - 1));\r
-    if (*(String - 1)  != '0') {\r
+  if (InternalBaseLibAsciiToUpper (*String) == 'X') {\r
+    ASSERT (*(String - 1) == '0');\r
+    if (*(String - 1) != '0') {\r
       return 0;\r
     }\r
     //\r
@@ -1943,10 +1947,7 @@ AsciiStrHexToUint64 (
     // If the Hex Number represented by String overflows according \r
     // to the range defined by UINTN, then ASSERT().\r
     //\r
-    ASSERT ((Result < QUIENT_MAX_UINT64_DIVIDED_BY_16) ||\r
-      ((QUIENT_MAX_UINT64_DIVIDED_BY_16 == Result) && \r
-      (InternalAsciiHexCharToUintn (*String) <= REMINDER_MAX_UINT64_DIVIDED_BY_16))\r
-      );\r
+    ASSERT (Result <= RShiftU64 (((UINT64) ~0) - InternalHexCharToUintn (*String) , 4));\r
 \r
     Result = LShiftU64 (Result, 4);\r
     Result = Result + InternalAsciiHexCharToUintn (*String);\r
@@ -1958,30 +1959,30 @@ AsciiStrHexToUint64 (
 \r
 \r
 /**\r
-  Convert one Null-terminated ASCII string to a Null-terminated \r
+  Convert one Null-terminated ASCII string to a Null-terminated\r
   Unicode string and returns the Unicode string.\r
 \r
-  This function converts the contents of the ASCII string Source to the Unicode \r
-  string Destination, and returns Destination.  The function terminates the \r
-  Unicode string Destination by appending a Null-terminator character at the end. \r
-  The caller is responsible to make sure Destination points to a buffer with size \r
+  This function converts the contents of the ASCII string Source to the Unicode\r
+  string Destination, and returns Destination.  The function terminates the\r
+  Unicode string Destination by appending a Null-terminator character at the end.\r
+  The caller is responsible to make sure Destination points to a buffer with size\r
   equal or greater than ((AsciiStrLen (Source) + 1) * sizeof (CHAR16)) in bytes.\r
-  \r
+\r
   If Destination is NULL, then ASSERT().\r
   If Destination is not aligned on a 16-bit boundary, then ASSERT().\r
   If Source is NULL, then ASSERT().\r
   If Source and Destination overlap, then ASSERT().\r
-  If PcdMaximumAsciiStringLength is not zero, and Source contains more than \r
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator, \r
+  If PcdMaximumAsciiStringLength is not zero, and Source contains more than\r
+  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
   then ASSERT().\r
-  If PcdMaximumUnicodeStringLength is not zero, and Source contains more than \r
-  PcdMaximumUnicodeStringLength ASCII characters not including the \r
+  If PcdMaximumUnicodeStringLength is not zero, and Source contains more than\r
+  PcdMaximumUnicodeStringLength ASCII characters not including the\r
   Null-terminator, then ASSERT().\r
 \r
-  @param  Source        Pointer to a Null-terminated ASCII string.\r
-  @param  Destination   Pointer to a Null-terminated Unicode string.\r
+  @param  Source        A pointer to a Null-terminated ASCII string.\r
+  @param  Destination   A pointer to a Null-terminated Unicode string.\r
 \r
-  @return Destination\r
+  @return Destination.\r
 \r
 **/\r
 CHAR16 *\r
@@ -2034,7 +2035,7 @@ AsciiStrToUnicodeStr (
 \r
   @param  Value The 8-bit value to convert to BCD. Range 0..99.\r
 \r
-  @return The BCD value\r
+  @return The BCD value.\r
 \r
 **/\r
 UINT8\r
@@ -2071,244 +2072,3 @@ BcdToDecimal8 (
   ASSERT ((Value & 0xf) < 0xa);\r
   return (UINT8) ((Value >> 4) * 10 + (Value & 0xf));\r
 }\r
-\r
-\r
-/**\r
-  Convert a nibble in the low 4 bits of a byte to a Unicode hexadecimal character.\r
-\r
-  This function converts a nibble in the low 4 bits of a byte to a Unicode hexadecimal \r
-  character  For example, the nibble  0x01 and 0x0A will converted to L'1' and L'A' \r
-  respectively.\r
-\r
-  The upper nibble in the input byte will be masked off.\r
-\r
-  @param Nibble     The nibble which is in the low 4 bits of the input byte.\r
-\r
-  @retval  CHAR16   The Unicode hexadecimal character.\r
-  \r
-**/\r
-CHAR16\r
-NibbleToHexChar (\r
-  IN UINT8      Nibble\r
-  )\r
-{\r
-  Nibble &= 0x0F;\r
-  if (Nibble <= 0x9) {\r
-    return (CHAR16)(Nibble + L'0');\r
-  }\r
-\r
-  return (CHAR16)(Nibble - 0xA + L'A');\r
-}\r
-\r
-/** \r
-  Convert binary buffer to a Unicode String in a specified sequence. \r
-\r
-  This function converts bytes in the binary Buffer Buf to a Unicode String Str. \r
-  Each byte will be represented by two Unicode characters. For example, byte 0xA1 will \r
-  be converted into two Unicode character L'A' and L'1'. In the output String, the Unicode Character \r
-  for the Most Significant Nibble will be put before the Unicode Character for the Least Significant\r
-  Nibble. The output string for the buffer containing a single byte 0xA1 will be L"A1". \r
-  For a buffer with multiple bytes, the Unicode character produced by the first byte will be put into the \r
-  the last character in the output string. The one next to first byte will be put into the\r
-  character before the last character. This rules applies to the rest of the bytes. The Unicode\r
-  character by the last byte will be put into the first character in the output string. For example,\r
-  the input buffer for a 64-bits unsigned integrer 0x12345678abcdef1234 will be converted to\r
-  a Unicode string equal to L"12345678abcdef1234".\r
-\r
-  @param String                        On input, String is pointed to the buffer allocated for the convertion.\r
-  @param StringLen                     The Length of String buffer to hold the output String. The length must include the tailing '\0' character.\r
-                                       The StringLen required to convert a N bytes Buffer will be a least equal to or greater \r
-                                       than 2*N + 1.\r
-  @param Buffer                        The pointer to a input buffer.\r
-  @param BufferSizeInBytes             Lenth in bytes of the input buffer.\r
-  \r
-\r
-  @retval  EFI_SUCCESS                 The convertion is successfull. All bytes in Buffer has been convert to the corresponding\r
-                                       Unicode character and placed into the right place in String.\r
-  @retval  EFI_BUFFER_TOO_SMALL        StringSizeInBytes is smaller than 2 * N + 1the number of bytes required to\r
-                                       complete the convertion. \r
-**/\r
-RETURN_STATUS\r
-EFIAPI\r
-BufToHexString (\r
-  IN OUT       CHAR16               *String,\r
-  IN OUT       UINTN                *StringLen,\r
-  IN     CONST UINT8                *Buffer,\r
-  IN           UINTN                BufferSizeInBytes\r
-  )\r
-{\r
-  UINTN       Idx;\r
-  UINT8       Byte;\r
-  UINTN       StrLen;\r
-\r
-  //\r
-  // Make sure string is either passed or allocate enough.\r
-  // It takes 2 Unicode characters (4 bytes) to represent 1 byte of the binary buffer.\r
-  // Plus the Unicode termination character.\r
-  //\r
-  StrLen = BufferSizeInBytes * 2;\r
-  if (StrLen > ((*StringLen) - 1)) {\r
-    *StringLen = StrLen + 1;\r
-    return RETURN_BUFFER_TOO_SMALL;\r
-  }\r
-\r
-  *StringLen = StrLen + 1;\r
-  //\r
-  // Ends the string.\r
-  //\r
-  String[StrLen] = L'\0'; \r
-\r
-  for (Idx = 0; Idx < BufferSizeInBytes; Idx++) {\r
-\r
-    Byte = Buffer[Idx];\r
-    String[StrLen - 1 - Idx * 2] = NibbleToHexChar (Byte);\r
-    String[StrLen - 2 - Idx * 2] = NibbleToHexChar ((UINT8)(Byte >> 4));\r
-  }\r
-\r
-  return RETURN_SUCCESS;\r
-}\r
-\r
-\r
-/**\r
-  Convert a Unicode string consisting of hexadecimal characters to a output byte buffer.\r
-\r
-  This function converts a Unicode string consisting of characters in the range of Hexadecimal\r
-  character (L'0' to L'9', L'A' to L'F' and L'a' to L'f') to a output byte buffer. The function will stop\r
-  at the first non-hexadecimal character or the NULL character. The convertion process can be\r
-  simply viewed as the reverse operations defined by BufToHexString. Two Unicode characters will be \r
-  converted into one byte. The first Unicode character represents the Most Significant Nibble and the\r
-  second Unicode character represents the Least Significant Nibble in the output byte. \r
-  The first pair of Unicode characters represents the last byte in the output buffer. The second pair of Unicode \r
-  characters represent the  the byte preceding the last byte. This rule applies to the rest pairs of bytes. \r
-  The last pair represent the first byte in the output buffer. \r
-\r
-  For example, a Unciode String L"12345678" will be converted into a buffer wil the following bytes \r
-  (first byte is the byte in the lowest memory address): "0x78, 0x56, 0x34, 0x12".\r
-\r
-  If String has N valid hexadecimal characters for conversion,  the caller must make sure Buffer is at least \r
-  N/2 (if N is even) or (N+1)/2 (if N if odd) bytes. \r
-\r
-  @param Buffer                      The output buffer allocated by the caller.\r
-  @param BufferSizeInBytes           On input, the size in bytes of Buffer. On output, it is updated to \r
-                                     contain the size of the Buffer which is actually used for the converstion.\r
-                                     For Unicode string with 2*N hexadecimal characters (not including the \r
-                                     tailing NULL character), N bytes of Buffer will be used for the output.\r
-  @param String                      The input hexadecimal string.\r
-  @param ConvertedStrLen             The number of hexadecimal characters used to produce content in output\r
-                                     buffer Buffer.\r
-\r
-  @retval  RETURN_BUFFER_TOO_SMALL   The input BufferSizeInBytes is too small to hold the output. BufferSizeInBytes\r
-                                     will be updated to the size required for the converstion.\r
-  @retval  RETURN_SUCCESS            The convertion is successful or the first Unicode character from String\r
-                                     is hexadecimal. If ConvertedStrLen is not NULL, it is updated\r
-                                     to the number of hexadecimal character used for the converstion.\r
-**/\r
-RETURN_STATUS\r
-EFIAPI\r
-HexStringToBuf (\r
-  OUT          UINT8                    *Buffer,   \r
-  IN OUT       UINTN                    *BufferSizeInBytes,\r
-  IN     CONST CHAR16                   *String,\r
-  OUT          UINTN                    *ConvertedStrLen  OPTIONAL\r
-  )\r
-{\r
-  UINTN       HexCnt;\r
-  UINTN       Idx;\r
-  UINTN       BufferLength;\r
-  UINT8       Digit;\r
-  UINT8       Byte;\r
-\r
-  //\r
-  // Find out how many hex characters the string has.\r
-  //\r
-  for (Idx = 0, HexCnt = 0; IsHexDigit (&Digit, String[Idx]); Idx++, HexCnt++);\r
-\r
-  if (HexCnt == 0) {\r
-    *ConvertedStrLen = 0;\r
-    return RETURN_SUCCESS;\r
-  }\r
-  //\r
-  // Two Unicode characters make up 1 buffer byte. Round up.\r
-  //\r
-  BufferLength = (HexCnt + 1) / 2; \r
-\r
-  //\r
-  // Test if  buffer is passed enough.\r
-  //\r
-  if (BufferLength > (*BufferSizeInBytes)) {\r
-    *BufferSizeInBytes = BufferLength;\r
-    return RETURN_BUFFER_TOO_SMALL;\r
-  }\r
-\r
-  *BufferSizeInBytes = BufferLength;\r
-\r
-  for (Idx = 0; Idx < HexCnt; Idx++) {\r
-\r
-    IsHexDigit (&Digit, String[HexCnt - 1 - Idx]);\r
-\r
-    //\r
-    // For odd charaters, write the lower nibble for each buffer byte,\r
-    // and for even characters, the upper nibble.\r
-    //\r
-    if ((Idx & 1) == 0) {\r
-      Byte = Digit;\r
-    } else {\r
-      Byte = Buffer[Idx / 2];\r
-      Byte &= 0x0F;\r
-      Byte = (UINT8) (Byte | Digit << 4);\r
-    }\r
-\r
-    Buffer[Idx / 2] = Byte;\r
-  }\r
-\r
-  if (ConvertedStrLen != NULL) {\r
-    *ConvertedStrLen = HexCnt;\r
-  }\r
-\r
-  return RETURN_SUCCESS;\r
-}\r
-\r
-\r
-/**\r
-  Test if  a Unicode character is a hexadecimal digit. If true, the input\r
-  Unicode character is converted to a byte. \r
-\r
-  This function tests if a Unicode character is a hexadecimal digit. If true, the input\r
-  Unicode character is converted to a byte. For example, Unicode character\r
-  L'A' will be converted to 0x0A. \r
-\r
-  If Digit is NULL, then ASSERT.\r
-\r
-  @retval TRUE        Char is in the range of Hexadecimal number. Digit is updated\r
-                      to the byte value of the number.\r
-  @retval FALSE       Char is not in the range of Hexadecimal number. Digit is keep\r
-                      intact.\r
-  \r
-**/\r
-BOOLEAN\r
-IsHexDigit (\r
-  OUT UINT8      *Digit,\r
-  IN  CHAR16      Char\r
-  )\r
-{\r
-  ASSERT (Digit != NULL);\r
-  \r
-  if ((Char >= L'0') && (Char <= L'9')) {\r
-    *Digit = (UINT8) (Char - L'0');\r
-    return TRUE;\r
-  }\r
-\r
-  if ((Char >= L'A') && (Char <= L'F')) {\r
-    *Digit = (UINT8) (Char - L'A' + 0x0A);\r
-    return TRUE;\r
-  }\r
-\r
-  if ((Char >= L'a') && (Char <= L'f')) {\r
-    *Digit = (UINT8) (Char - L'a' + 0x0A);\r
-    return TRUE;\r
-  }\r
-\r
-  return FALSE;\r
-}\r
-\r
-\r