)\r
{\r
EFI_STATUS Status;\r
- EFI_HANDLE HiiDriverHandle;\r
- EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
\r
//\r
// Locate required Hii relative protocols\r
//\r
// Publish our HII data\r
//\r
- Status = HiiLibCreateHiiDriverHandle (&HiiDriverHandle);\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- PackageList = HiiLibPreparePackageList (1, &gSetupBrowserGuid, SetupBrowserStrings);\r
- ASSERT (PackageList != NULL);\r
- Status = mHiiDatabase->NewPackageList (\r
- mHiiDatabase,\r
- PackageList,\r
- HiiDriverHandle,\r
- &gHiiHandle\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
+ gHiiHandle = HiiAddPackages (\r
+ &gSetupBrowserGuid,\r
+ ImageHandle,\r
+ SetupBrowserStrings,\r
+ NULL\r
+ );\r
+ ASSERT (gHiiHandle != NULL);\r
\r
//\r
// Initialize Driver private data\r
)\r
{\r
EFI_STRING_ID StringId;\r
- EFI_STATUS Status;\r
\r
- StringId = 0;\r
- Status = HiiLibNewString (HiiHandle, &StringId, String);\r
- ASSERT_EFI_ERROR (Status);\r
+ StringId = HiiSetString (HiiHandle, 0, String, NULL);\r
+ ASSERT (StringId != 0);\r
\r
return StringId;\r
}\r
CHAR16 NullChar;\r
\r
NullChar = CHAR_NULL;\r
- return HiiLibSetString (HiiHandle, StringId, &NullChar);\r
+ HiiSetString (HiiHandle, StringId, &NullChar, NULL);\r
+ return EFI_SUCCESS;\r
}\r
\r
\r
IN EFI_HII_HANDLE HiiHandle\r
)\r
{\r
- EFI_STATUS Status;\r
- CHAR16 *String;\r
- UINTN BufferLength;\r
+ EFI_STRING String;\r
\r
- //\r
- // Set default string size assumption at no more than 256 bytes\r
- //\r
- BufferLength = 0x100;\r
- String = AllocateZeroPool (BufferLength);\r
+ String = HiiGetString (HiiHandle, Token, NULL);\r
ASSERT (String != NULL);\r
-\r
- Status = HiiLibGetString (HiiHandle, Token, String, &BufferLength);\r
-\r
- if (Status == EFI_BUFFER_TOO_SMALL) {\r
- FreePool (String);\r
- String = AllocateZeroPool (BufferLength);\r
- ASSERT (String != NULL);\r
-\r
- Status = HiiLibGetString (HiiHandle, Token, String, &BufferLength);\r
- }\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- return String;\r
+ return (CHAR16 *) String;\r
}\r
\r
\r
CHAR16 *Value;\r
CHAR16 *StringPtr;\r
UINTN Length;\r
+ UINTN Index;\r
+ UINTN LengthStr;\r
BOOLEAN IsBufferStorage;\r
BOOLEAN IsString;\r
+ CHAR16 TemStr[5];\r
+ UINT8 DigitUint8;\r
\r
Status = EFI_SUCCESS;\r
\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
-\r
+ \r
+ LengthStr = StrLen (Value);\r
+ Status = EFI_SUCCESS;\r
if (IsString) {\r
//\r
// Convert Config String to Unicode String, e.g "0041004200430044" => "ABCD"\r
+ // Add string tail char L'\0' into Length\r
//\r
- Length = StorageWidth + sizeof (CHAR16);\r
- Status = ConfigStringToUnicode ((CHAR16 *) Dst, &Length, Value);\r
+ Length = StorageWidth + sizeof (CHAR16);\r
+ if (Length < ((LengthStr / 4 + 1) * 2)) {\r
+ Status = EFI_BUFFER_TOO_SMALL;\r
+ } else {\r
+ StringPtr = (CHAR16 *) Dst;\r
+ ZeroMem (TemStr, sizeof (TemStr));\r
+ for (Index = 0; Index < LengthStr; Index += 4) {\r
+ StrnCpy (TemStr, Value + Index, 4);\r
+ StringPtr[Index/4] = (CHAR16) StrHexToUint64 (TemStr);\r
+ }\r
+ //\r
+ // Add tailing L'\0' character\r
+ //\r
+ StringPtr[Index/4] = L'\0';\r
+ }\r
} else {\r
- Status = HexStringToBuf (Dst, &StorageWidth, Value, NULL);\r
+ if (StorageWidth < ((LengthStr + 1) / 2)) {\r
+ Status = EFI_BUFFER_TOO_SMALL;\r
+ } else {\r
+ ZeroMem (TemStr, sizeof (TemStr));\r
+ for (Index = 0; Index < LengthStr; Index ++) {\r
+ TemStr[0] = Value[LengthStr - Index - 1];\r
+ DigitUint8 = (UINT8) StrHexToUint64 (TemStr);\r
+ if ((Index & 1) == 0) {\r
+ Dst [Index/2] = DigitUint8;\r
+ } else {\r
+ Dst [Index/2] = (UINT8) ((DigitUint8 << 4) + Dst [Index/2]);\r
+ }\r
+ }\r
+ }\r
}\r
\r
FreePool (Value);\r
}\r
*StringPtr = L'\0';\r
\r
+ LengthStr = StrLen (Value);\r
+ Status = EFI_SUCCESS;\r
if (!IsBufferStorage && IsString) {\r
//\r
// Convert Config String to Unicode String, e.g "0041004200430044" => "ABCD"\r
+ // Add string tail char L'\0' into Length\r
//\r
- Length = StorageWidth + sizeof (CHAR16);\r
- Status = ConfigStringToUnicode ((CHAR16 *) Dst, &Length, Value);\r
+ Length = StorageWidth + sizeof (CHAR16);\r
+ if (Length < ((LengthStr / 4 + 1) * 2)) {\r
+ Status = EFI_BUFFER_TOO_SMALL;\r
+ } else {\r
+ StringPtr = (CHAR16 *) Dst;\r
+ ZeroMem (TemStr, sizeof (TemStr));\r
+ for (Index = 0; Index < LengthStr; Index += 4) {\r
+ StrnCpy (TemStr, Value + Index, 4);\r
+ StringPtr[Index/4] = (CHAR16) StrHexToUint64 (TemStr);\r
+ }\r
+ //\r
+ // Add tailing L'\0' character\r
+ //\r
+ StringPtr[Index/4] = L'\0';\r
+ }\r
} else {\r
- Status = HexStringToBuf (Dst, &StorageWidth, Value, NULL);\r
- if (EFI_ERROR (Status)) {\r
- FreePool (Result);\r
- return Status;\r
+ if (StorageWidth < ((LengthStr + 1) / 2)) {\r
+ Status = EFI_BUFFER_TOO_SMALL;\r
+ } else {\r
+ ZeroMem (TemStr, sizeof (TemStr));\r
+ for (Index = 0; Index < LengthStr; Index ++) {\r
+ TemStr[0] = Value[LengthStr - Index - 1];\r
+ DigitUint8 = (UINT8) StrHexToUint64 (TemStr);\r
+ if ((Index & 1) == 0) {\r
+ Dst [Index/2] = DigitUint8;\r
+ } else {\r
+ Dst [Index/2] = (UINT8) ((DigitUint8 << 4) + Dst [Index/2]);\r
+ }\r
+ }\r
}\r
}\r
\r
+ if (EFI_ERROR (Status)) {\r
+ FreePool (Result);\r
+ return Status;\r
+ }\r
+\r
//\r
// Synchronize Edit Buffer\r
//\r
} else {\r
SetValueByName (Storage, Question->VariableName, Value);\r
}\r
+\r
FreePool (Result);\r
}\r
\r
UINTN Length;\r
BOOLEAN IsBufferStorage;\r
BOOLEAN IsString;\r
+ UINT8 *TemBuffer;\r
+ CHAR16 *TemName;\r
+ CHAR16 *TemString;\r
+ UINTN Index;\r
\r
Status = EFI_SUCCESS;\r
\r
} else {\r
if (IsString) {\r
//\r
- // Convert Unicode String to Config String, e.g. "ABCD" => "0041004200430044"\r
+ // Allocate enough string buffer.\r
//\r
Value = NULL;\r
BufferLen = ((StrLen ((CHAR16 *) Src) * 4) + 1) * sizeof (CHAR16);\r
Value = AllocateZeroPool (BufferLen);\r
ASSERT (Value != NULL);\r
- Status = UnicodeToConfigString (Value, &BufferLen, (CHAR16 *) Src);\r
- ASSERT_EFI_ERROR (Status);\r
+ //\r
+ // Convert Unicode String to Config String, e.g. "ABCD" => "0041004200430044"\r
+ //\r
+ TemName = (CHAR16 *) Src;\r
+ TemString = Value;\r
+ for (; *TemName != L'\0'; TemName++) {\r
+ TemString += UnicodeValueToString (TemString, PREFIX_ZERO | RADIX_HEX, *TemName, 4);\r
+ }\r
} else {\r
BufferLen = StorageWidth * 2 + 1;\r
Value = AllocateZeroPool (BufferLen * sizeof (CHAR16));\r
ASSERT (Value != NULL);\r
- BufToHexString (Value, &BufferLen, Src, StorageWidth);\r
- ToLower (Value);\r
+ //\r
+ // Convert Buffer to Hex String\r
+ //\r
+ TemBuffer = Src + StorageWidth - 1;\r
+ TemString = Value;\r
+ for (Index = 0; Index < StorageWidth; Index ++, TemBuffer --) {\r
+ TemString += UnicodeValueToString (TemString, PREFIX_ZERO | RADIX_HEX, *TemBuffer, 2);\r
+ }\r
}\r
\r
Status = SetValueByName (Storage, Question->VariableName, Value);\r
}\r
\r
Value = ConfigResp + StrLen (ConfigResp);\r
+\r
if (!IsBufferStorage && IsString) {\r
//\r
// Convert Unicode String to Config String, e.g. "ABCD" => "0041004200430044"\r
//\r
- BufferLen = ((StrLen ((CHAR16 *) Src) * 4) + 1) * sizeof (CHAR16);\r
- Status = UnicodeToConfigString (Value, &BufferLen, (CHAR16 *) Src);\r
- ASSERT_EFI_ERROR (Status);\r
+ TemName = (CHAR16 *) Src;\r
+ TemString = Value;\r
+ for (; *TemName != L'\0'; TemName++) {\r
+ TemString += UnicodeValueToString (TemString, PREFIX_ZERO | RADIX_HEX, *TemName, 4);\r
+ }\r
} else {\r
- BufferLen = StorageWidth * 2 + 1;\r
- BufToHexString (Value, &BufferLen, Src, StorageWidth);\r
- ToLower (Value);\r
+ //\r
+ // Convert Buffer to Hex String\r
+ //\r
+ TemBuffer = Src + StorageWidth - 1;\r
+ TemString = Value;\r
+ for (Index = 0; Index < StorageWidth; Index ++, TemBuffer --) {\r
+ TemString += UnicodeValueToString (TemString, PREFIX_ZERO | RADIX_HEX, *TemBuffer, 2);\r
+ }\r
+ }\r
+ \r
+ //\r
+ // Convert to lower char.\r
+ //\r
+ for (TemString = Value; *Value != L'\0'; Value++) {\r
+ if (*Value >= L'A' && *Value <= L'Z') {\r
+ *Value = (CHAR16) (*Value - L'A' + L'a');\r
+ }\r
}\r
\r
//\r