From 63d55bb98a5fa3018378d06c50784e463c6e999a Mon Sep 17 00:00:00 2001 From: lgao4 Date: Wed, 8 Apr 2009 00:56:51 +0000 Subject: Replace BufToHexString by UnicodeValueToString Replace HexStringToBuf by StrHexToUint64 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8034 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Universal/HiiDatabaseDxe/ConfigRouting.c | 124 +++++++++++++++++---- MdeModulePkg/Universal/HiiDatabaseDxe/Database.c | 2 +- .../Universal/HiiDatabaseDxe/HiiDatabase.h | 21 +++- .../Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf | 4 +- MdeModulePkg/Universal/HiiDatabaseDxe/R8Lib.c | 60 ---------- MdeModulePkg/Universal/HiiDatabaseDxe/R8Lib.h | 39 ------- MdeModulePkg/Universal/HiiDatabaseDxe/String.c | 46 +++++++- 7 files changed, 162 insertions(+), 134 deletions(-) delete mode 100644 MdeModulePkg/Universal/HiiDatabaseDxe/R8Lib.c delete mode 100644 MdeModulePkg/Universal/HiiDatabaseDxe/R8Lib.h (limited to 'MdeModulePkg/Universal/HiiDatabaseDxe') diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c b/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c index d55fdf4366..4b8a70629d 100644 --- a/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c +++ b/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c @@ -80,6 +80,10 @@ GetDevicePath ( UINTN Length; EFI_STRING PathHdr; EFI_STRING DevicePathString; + UINT8 *DevicePathBuffer; + CHAR16 TemStr[2]; + UINTN Index; + UINT8 DigitUint8; if (String == NULL || DevicePath == NULL) { return EFI_INVALID_PARAMETER; @@ -114,21 +118,52 @@ GetDevicePath ( // as the device path resides in RAM memory. // Translate the data into binary. // - Length /= 2; - *DevicePath = (UINT8 *) AllocateZeroPool (Length); - if (*DevicePath == NULL) { + DevicePathBuffer = (UINT8 *) AllocateZeroPool ((Length + 1) / 2); + if (DevicePathBuffer == NULL) { FreePool (DevicePathString); return EFI_OUT_OF_RESOURCES; } - HexStringToBufInReverseOrder (*DevicePath, &Length, DevicePathString); + ZeroMem (TemStr, sizeof (TemStr)); + for (Index = 0; DevicePathString[Index] != L'\0'; Index ++) { + TemStr[0] = DevicePathString[Index]; + DigitUint8 = (UINT8) StrHexToUint64 (TemStr); + if ((Index & 1) == 0) { + DevicePathBuffer [Index/2] = DigitUint8; + } else { + DevicePathBuffer [Index/2] = (UINT8) ((DevicePathBuffer [Index/2] << 4) + DigitUint8); + } + } FreePool (DevicePathString); + + *DevicePath = DevicePathBuffer; return EFI_SUCCESS; } +/** + Converts the unicode character of the string from uppercase to lowercase. + This is a internal function. + + @param Str String to be converted + +**/ +VOID +EFIAPI +HiiToLower ( + IN OUT CHAR16 *Str + ) +{ + CHAR16 *Ptr; + + for (Ptr = Str; *Ptr != L'\0'; Ptr++) { + if (*Ptr >= L'A' && *Ptr <= L'Z') { + *Ptr = (CHAR16) (*Ptr - L'A' + L'a'); + } + } +} /** Generate a sub string then output it. @@ -159,8 +194,11 @@ GenerateSubStr ( { UINTN Length; EFI_STRING Str; - EFI_STATUS Status; EFI_STRING StringHeader; + CHAR16 *TemString; + CHAR16 *TemName; + UINT8 *TemBuffer; + UINTN Index; ASSERT (String != NULL && SubStr != NULL); @@ -171,34 +209,55 @@ GenerateSubStr ( } Length = StrLen (String) + BufferLen * 2 + 1 + 1; - Str = AllocateZeroPool (Length * sizeof (CHAR16)); + Str = AllocateZeroPool (Length * sizeof (CHAR16)); ASSERT (Str != NULL); StrCpy (Str, String); Length = (BufferLen * 2 + 1) * sizeof (CHAR16); - Status = EFI_SUCCESS; StringHeader = Str + StrLen (String); + TemString = (CHAR16 *) StringHeader; switch (Flag) { case 1: - Status = BufInReverseOrderToHexString (StringHeader, (UINT8 *) Buffer, BufferLen); + // + // Convert Buffer to Hex String in reverse order + // + TemBuffer = ((UINT8 *) Buffer); + for (Index = 0; Index < BufferLen; Index ++, TemBuffer ++) { + TemString += UnicodeValueToString (TemString, PREFIX_ZERO | RADIX_HEX, *TemBuffer, 2); + } break; case 2: - Status = UnicodeToConfigString (StringHeader, &Length, (CHAR16 *) Buffer); + // + // Check buffer is enough + // + TemName = (CHAR16 *) Buffer; + ASSERT (Length < ((StrLen (TemName) * 4 + 1) * sizeof (CHAR16))); + // + // Convert Unicode String to Config String, e.g. "ABCD" => "0041004200430044" + // + for (; *TemName != L'\0'; TemName++) { + TemString += UnicodeValueToString (TemString, PREFIX_ZERO | RADIX_HEX, *TemName, 4); + } break; case 3: - Status = BufToHexString (StringHeader, &Length, (UINT8 *) Buffer, BufferLen); // - // Convert the uppercase to lowercase since is defined in lowercase format. + // Convert Buffer to Hex String // - ToLower (StringHeader); + TemBuffer = ((UINT8 *) Buffer) + BufferLen - 1; + for (Index = 0; Index < BufferLen; Index ++, TemBuffer --) { + TemString += UnicodeValueToString (TemString, PREFIX_ZERO | RADIX_HEX, *TemBuffer, 2); + } break; default: break; } - ASSERT_EFI_ERROR (Status); + // + // Convert the uppercase to lowercase since is defined in lowercase format. + // + HiiToLower (StringHeader); StrCat (Str, L"&"); *SubStr = Str; @@ -344,14 +403,17 @@ GetValueOfNumber ( EFI_STRING Str; UINT8 *Buf; EFI_STATUS Status; + UINT8 DigitUint8; + UINTN Index; + CHAR16 TemStr[2]; ASSERT (StringPtr != NULL && Number != NULL && Len != NULL); - ASSERT (*StringPtr != 0); + ASSERT (*StringPtr != L'\0'); Buf = NULL; TmpPtr = StringPtr; - while (*StringPtr != 0 && *StringPtr != L'&') { + while (*StringPtr != L'\0' && *StringPtr != L'&') { StringPtr++; } *Len = StringPtr - TmpPtr; @@ -363,7 +425,7 @@ GetValueOfNumber ( goto Exit; } CopyMem (Str, TmpPtr, *Len * sizeof (CHAR16)); - *(Str + *Len) = 0; + *(Str + *Len) = L'\0'; Length = (Length + 1) / 2; Buf = (UINT8 *) AllocateZeroPool (Length); @@ -371,10 +433,17 @@ GetValueOfNumber ( Status = EFI_OUT_OF_RESOURCES; goto Exit; } - - Status = HexStringToBuf (Buf, &Length, Str, NULL); - if (EFI_ERROR (Status)) { - goto Exit; + + Length = *Len; + ZeroMem (TemStr, sizeof (TemStr)); + for (Index = 0; Index < Length; Index ++) { + TemStr[0] = Str[Length - Index - 1]; + DigitUint8 = (UINT8) StrHexToUint64 (TemStr); + if ((Index & 1) == 0) { + Buf [Index/2] = DigitUint8; + } else { + Buf [Index/2] = (UINT8) ((Buf [Index/2] << 4) + DigitUint8); + } } *Number = Buf; @@ -384,6 +453,7 @@ Exit: if (Str != NULL) { FreePool (Str); } + return Status; } @@ -959,6 +1029,9 @@ HiiBlockToConfig ( UINT8 *Value; EFI_STRING ValueStr; EFI_STRING ConfigElement; + UINTN Index; + UINT8 *TemBuffer; + CHAR16 *TemString; if (This == NULL || Progress == NULL || Config == NULL) { return EFI_INVALID_PARAMETER; @@ -1107,10 +1180,13 @@ HiiBlockToConfig ( Status = EFI_OUT_OF_RESOURCES; goto Exit; } - - Status = BufToHexString (ValueStr, &Length, Value, Width); - ASSERT_EFI_ERROR (Status); - ToLower (ValueStr); + + TemString = ValueStr; + TemBuffer = Value + Width - 1; + for (Index = 0; Index < Width; Index ++, TemBuffer --) { + TemString += UnicodeValueToString (TemString, PREFIX_ZERO | RADIX_HEX, *TemBuffer, 2); + } + HiiToLower (ValueStr); FreePool (Value); Value = NULL; diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/Database.c b/MdeModulePkg/Universal/HiiDatabaseDxe/Database.c index b1a3374991..1721d2f5e4 100644 --- a/MdeModulePkg/Universal/HiiDatabaseDxe/Database.c +++ b/MdeModulePkg/Universal/HiiDatabaseDxe/Database.c @@ -809,7 +809,7 @@ InsertStringPackage ( AsciiStrCpy (Language, (CHAR8 *) PackageHdr + HeaderSize - LanguageSize); for (Link = PackageList->StringPkgHdr.ForwardLink; Link != &PackageList->StringPkgHdr; Link = Link->ForwardLink) { StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE); - if (R8_EfiLibCompareLanguage (Language, StringPackage->StringPkgHdr->Language)) { + if (HiiCompareLanguage (Language, StringPackage->StringPkgHdr->Language)) { FreePool (Language); return EFI_UNSUPPORTED; } diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h b/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h index 04dbdc81f0..636db50f61 100644 --- a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h +++ b/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h @@ -41,6 +41,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include #include +#include #define HII_DATABASE_NOTIFY_GUID \ @@ -1688,11 +1689,25 @@ HiiGetAltCfg ( ); +/** + Compare whether two names of languages are identical. + + @param Language1 Name of language 1 + @param Language2 Name of language 2 + + @retval TRUE same + @retval FALSE not same + +**/ +BOOLEAN +HiiCompareLanguage ( + IN CHAR8 *Language1, + IN CHAR8 *Language2 + ) +; + // // Global variables // extern EFI_EVENT gHiiKeyboardLayoutChanged; - -#include "R8Lib.h" - #endif diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf b/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf index ae584cca1b..cdb84d592f 100644 --- a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf +++ b/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf @@ -36,9 +36,6 @@ String.c Database.c Font.c - R8Lib.h - R8Lib.c - [Packages] MdePkg/MdePkg.dec @@ -57,6 +54,7 @@ UefiLib PcdLib UefiRuntimeServicesTableLib + PrintLib [Protocols] gEfiDevicePathProtocolGuid ## SOMETIMES_CONSUMES diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/R8Lib.c b/MdeModulePkg/Universal/HiiDatabaseDxe/R8Lib.c deleted file mode 100644 index 7c3e9b8b35..0000000000 --- a/MdeModulePkg/Universal/HiiDatabaseDxe/R8Lib.c +++ /dev/null @@ -1,60 +0,0 @@ -/** @file -Implement a utility function named R8_EfiLibCompareLanguage. - - Copyright (c) 2007 - 2008, 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 - http://opensource.org/licenses/bsd-license.php - - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - - -**/ - -#include "HiiDatabase.h" - - -/** - Compare whether two names of languages are identical. - - @param Language1 Name of language 1 - @param Language2 Name of language 2 - - @retval TRUE same - @retval FALSE not same - -**/ -BOOLEAN -R8_EfiLibCompareLanguage ( - IN CHAR8 *Language1, - IN CHAR8 *Language2 - ) -{ - // - // Porting Guide: - // This library interface is simply obsolete. - // Include the source code to user code. - // - UINTN Index; - - for (Index = 0; (Language1[Index] != 0) && (Language2[Index] != 0); Index++) { - if (Language1[Index] != Language2[Index]) { - return FALSE; - } - } - - if (((Language1[Index] == 0) && (Language2[Index] == 0)) || - ((Language1[Index] == 0) && (Language2[Index] != ';')) || - ((Language1[Index] == ';') && (Language2[Index] != 0)) || - ((Language1[Index] == ';') && (Language2[Index] != ';'))) { - return TRUE; - } - - return FALSE; -} - - - diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/R8Lib.h b/MdeModulePkg/Universal/HiiDatabaseDxe/R8Lib.h deleted file mode 100644 index 22b2bc9d39..0000000000 --- a/MdeModulePkg/Universal/HiiDatabaseDxe/R8Lib.h +++ /dev/null @@ -1,39 +0,0 @@ -/** @file -Implement a utility function named R8_EfiLibCompareLanguage. - - Copyright (c) 2007 - 2008, 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 - http://opensource.org/licenses/bsd-license.php - - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - - -**/ - -#ifndef __R8_LIB_H__ -#define __R8_LIB_H__ - -/** - Compare whether two names of languages are identical. - - @param Language1 Name of language 1 - @param Language2 Name of language 2 - - @retval TRUE same - @retval FALSE not same - -**/ -BOOLEAN -R8_EfiLibCompareLanguage ( - IN CHAR8 *Language1, - IN CHAR8 *Language2 - ) -; - -#endif - - diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/String.c b/MdeModulePkg/Universal/HiiDatabaseDxe/String.c index c6edd87cfd..00ff6ce786 100644 --- a/MdeModulePkg/Universal/HiiDatabaseDxe/String.c +++ b/MdeModulePkg/Universal/HiiDatabaseDxe/String.c @@ -1014,7 +1014,7 @@ HiiNewString ( Link = Link->ForwardLink ) { StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE); - if (R8_EfiLibCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) { + if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) { Matched = TRUE; break; } @@ -1353,7 +1353,7 @@ HiiGetString ( Link = Link->ForwardLink ) { StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE); - if (R8_EfiLibCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) { + if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) { Status = GetStringWorker (Private, StringPackage, StringId, String, StringSize, StringFontInfo); if (Status != EFI_NOT_FOUND) { return Status; @@ -1446,7 +1446,7 @@ HiiSetString ( Link = Link->ForwardLink ) { StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE); - if (R8_EfiLibCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) { + if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) { OldPackageLen = StringPackage->StringPkgHdr->Header.Length; Status = SetStringWorker ( Private, @@ -1635,7 +1635,7 @@ HiiGetSecondaryLanguages ( Link1 = Link1->ForwardLink ) { StringPackage = CR (Link1, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE); - if (R8_EfiLibCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) FirstLanguage)) { + if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) FirstLanguage)) { Languages = StringPackage->StringPkgHdr->Language; // // Language is a series of ';' terminated strings, first one is primary @@ -1663,3 +1663,41 @@ HiiGetSecondaryLanguages ( return EFI_INVALID_LANGUAGE; } +/** + Compare whether two names of languages are identical. + + @param Language1 Name of language 1 + @param Language2 Name of language 2 + + @retval TRUE same + @retval FALSE not same + +**/ +BOOLEAN +HiiCompareLanguage ( + IN CHAR8 *Language1, + IN CHAR8 *Language2 + ) +{ + // + // Porting Guide: + // This library interface is simply obsolete. + // Include the source code to user code. + // + UINTN Index; + + for (Index = 0; (Language1[Index] != 0) && (Language2[Index] != 0); Index++) { + if (Language1[Index] != Language2[Index]) { + return FALSE; + } + } + + if (((Language1[Index] == 0) && (Language2[Index] == 0)) || + ((Language1[Index] == 0) && (Language2[Index] != ';')) || + ((Language1[Index] == ';') && (Language2[Index] != 0)) || + ((Language1[Index] == ';') && (Language2[Index] != ';'))) { + return TRUE; + } + + return FALSE; +} -- cgit v1.2.3