diff --git a/MdePkg/Include/Library/BaseLib.h b/MdePkg/Include/Library/BaseLib.h index 1eb842384e..c58e4b089d 100644 --- a/MdePkg/Include/Library/BaseLib.h +++ b/MdePkg/Include/Library/BaseLib.h @@ -2,7 +2,7 @@ Provides string functions, linked list functions, math functions, synchronization functions, file path functions, and CPU architecture-specific functions. -Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -2720,6 +2720,46 @@ AsciiStrnToUnicodeStrS ( OUT UINTN *DestinationLength ); +/** + Convert a Unicode character to upper case only if + it maps to a valid small-case ASCII character. + + This internal function only deal with Unicode character + which maps to a valid small-case ASCII character, i.e. + L'a' to L'z'. For other Unicode character, the input character + is returned directly. + + @param Char The character to convert. + + @retval LowerCharacter If the Char is with range L'a' to L'z'. + @retval Unchanged Otherwise. + +**/ +CHAR16 +EFIAPI +CharToUpper ( + IN CHAR16 Char + ); + +/** + Converts a lowercase Ascii character to upper one. + + If Chr is lowercase Ascii character, then converts it to upper one. + + If Value >= 0xA0, then ASSERT(). + If (Value & 0x0F) >= 0x0A, then ASSERT(). + + @param Chr one Ascii character + + @return The uppercase value of Ascii character + +**/ +CHAR8 +EFIAPI +AsciiCharToUpper ( + IN CHAR8 Chr + ); + /** Converts an 8-bit value to an 8-bit BCD value. diff --git a/MdePkg/Library/BaseLib/SafeString.c b/MdePkg/Library/BaseLib/SafeString.c index 417497cbc9..27e337f0aa 100644 --- a/MdePkg/Library/BaseLib/SafeString.c +++ b/MdePkg/Library/BaseLib/SafeString.c @@ -1,7 +1,7 @@ /** @file Safe String functions. - Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.
+ Copyright (c) 2014 - 2019, Intel Corporation. All rights reserved.
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 @@ -905,7 +905,7 @@ StrHexToUintnS ( String++; } - if (InternalCharToUpper (*String) == L'X') { + if (CharToUpper (*String) == L'X') { if (*(String - 1) != L'0') { *Data = 0; return RETURN_SUCCESS; @@ -1036,7 +1036,7 @@ StrHexToUint64S ( String++; } - if (InternalCharToUpper (*String) == L'X') { + if (CharToUpper (*String) == L'X') { if (*(String - 1) != L'0') { *Data = 0; return RETURN_SUCCESS; @@ -2459,7 +2459,7 @@ AsciiStrHexToUintnS ( String++; } - if (InternalBaseLibAsciiToUpper (*String) == 'X') { + if (AsciiCharToUpper (*String) == 'X') { if (*(String - 1) != '0') { *Data = 0; return RETURN_SUCCESS; @@ -2586,7 +2586,7 @@ AsciiStrHexToUint64S ( String++; } - if (InternalBaseLibAsciiToUpper (*String) == 'X') { + if (AsciiCharToUpper (*String) == 'X') { if (*(String - 1) != '0') { *Data = 0; return RETURN_SUCCESS; diff --git a/MdePkg/Library/BaseLib/String.c b/MdePkg/Library/BaseLib/String.c index e6df12797d..467d91069d 100644 --- a/MdePkg/Library/BaseLib/String.c +++ b/MdePkg/Library/BaseLib/String.c @@ -1,7 +1,7 @@ /** @file Unicode and ASCII string primitives. - Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
+ Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
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 @@ -552,7 +552,7 @@ InternalIsDecimalDigitCharacter ( **/ CHAR16 EFIAPI -InternalCharToUpper ( +CharToUpper ( IN CHAR16 Char ) { @@ -586,7 +586,7 @@ InternalHexCharToUintn ( return Char - L'0'; } - return (10 + InternalCharToUpper (Char) - L'A'); + return (10 + CharToUpper (Char) - L'A'); } /** @@ -1181,7 +1181,7 @@ AsciiStrCmp ( **/ CHAR8 EFIAPI -InternalBaseLibAsciiToUpper ( +AsciiCharToUpper ( IN CHAR8 Chr ) { @@ -1211,7 +1211,7 @@ InternalAsciiHexCharToUintn ( return Char - '0'; } - return (10 + InternalBaseLibAsciiToUpper (Char) - 'A'); + return (10 + AsciiCharToUpper (Char) - 'A'); } @@ -1260,13 +1260,13 @@ AsciiStriCmp ( ASSERT (AsciiStrSize (FirstString)); ASSERT (AsciiStrSize (SecondString)); - UpperFirstString = InternalBaseLibAsciiToUpper (*FirstString); - UpperSecondString = InternalBaseLibAsciiToUpper (*SecondString); + UpperFirstString = AsciiCharToUpper (*FirstString); + UpperSecondString = AsciiCharToUpper (*SecondString); while ((*FirstString != '\0') && (*SecondString != '\0') && (UpperFirstString == UpperSecondString)) { FirstString++; SecondString++; - UpperFirstString = InternalBaseLibAsciiToUpper (*FirstString); - UpperSecondString = InternalBaseLibAsciiToUpper (*SecondString); + UpperFirstString = AsciiCharToUpper (*FirstString); + UpperSecondString = AsciiCharToUpper (*SecondString); } return UpperFirstString - UpperSecondString;