UINTN Length;\r
EFI_STRING PathHdr;\r
EFI_STRING DevicePathString;\r
+ UINT8 *DevicePathBuffer;\r
+ CHAR16 TemStr[2];\r
+ UINTN Index;\r
+ UINT8 DigitUint8;\r
\r
if (String == NULL || DevicePath == NULL) {\r
return EFI_INVALID_PARAMETER;\r
// as the device path resides in RAM memory.\r
// Translate the data into binary.\r
//\r
- Length /= 2;\r
- *DevicePath = (UINT8 *) AllocateZeroPool (Length);\r
- if (*DevicePath == NULL) {\r
+ DevicePathBuffer = (UINT8 *) AllocateZeroPool ((Length + 1) / 2);\r
+ if (DevicePathBuffer == NULL) {\r
FreePool (DevicePathString);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- HexStringToBufInReverseOrder (*DevicePath, &Length, DevicePathString);\r
+ ZeroMem (TemStr, sizeof (TemStr));\r
+ for (Index = 0; DevicePathString[Index] != L'\0'; Index ++) {\r
+ TemStr[0] = DevicePathString[Index];\r
+ DigitUint8 = (UINT8) StrHexToUint64 (TemStr);\r
+ if ((Index & 1) == 0) {\r
+ DevicePathBuffer [Index/2] = DigitUint8;\r
+ } else {\r
+ DevicePathBuffer [Index/2] = (UINT8) ((DevicePathBuffer [Index/2] << 4) + DigitUint8);\r
+ }\r
+ }\r
\r
FreePool (DevicePathString);\r
+ \r
+ *DevicePath = DevicePathBuffer;\r
\r
return EFI_SUCCESS;\r
\r
}\r
\r
+/**\r
+ Converts the unicode character of the string from uppercase to lowercase.\r
+ This is a internal function.\r
+\r
+ @param Str String to be converted\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+HiiToLower (\r
+ IN OUT CHAR16 *Str\r
+ )\r
+{\r
+ CHAR16 *Ptr;\r
+ \r
+ for (Ptr = Str; *Ptr != L'\0'; Ptr++) {\r
+ if (*Ptr >= L'A' && *Ptr <= L'Z') {\r
+ *Ptr = (CHAR16) (*Ptr - L'A' + L'a');\r
+ }\r
+ }\r
+}\r
\r
/**\r
Generate a sub string then output it.\r
{\r
UINTN Length;\r
EFI_STRING Str;\r
- EFI_STATUS Status;\r
EFI_STRING StringHeader;\r
+ CHAR16 *TemString;\r
+ CHAR16 *TemName;\r
+ UINT8 *TemBuffer;\r
+ UINTN Index;\r
\r
ASSERT (String != NULL && SubStr != NULL);\r
\r
}\r
\r
Length = StrLen (String) + BufferLen * 2 + 1 + 1;\r
- Str = AllocateZeroPool (Length * sizeof (CHAR16));\r
+ Str = AllocateZeroPool (Length * sizeof (CHAR16));\r
ASSERT (Str != NULL);\r
\r
StrCpy (Str, String);\r
Length = (BufferLen * 2 + 1) * sizeof (CHAR16);\r
\r
- Status = EFI_SUCCESS;\r
StringHeader = Str + StrLen (String);\r
+ TemString = (CHAR16 *) StringHeader;\r
\r
switch (Flag) {\r
case 1:\r
- Status = BufInReverseOrderToHexString (StringHeader, (UINT8 *) Buffer, BufferLen);\r
+ //\r
+ // Convert Buffer to Hex String in reverse order\r
+ //\r
+ TemBuffer = ((UINT8 *) Buffer);\r
+ for (Index = 0; Index < BufferLen; Index ++, TemBuffer ++) {\r
+ TemString += UnicodeValueToString (TemString, PREFIX_ZERO | RADIX_HEX, *TemBuffer, 2);\r
+ }\r
break;\r
case 2:\r
- Status = UnicodeToConfigString (StringHeader, &Length, (CHAR16 *) Buffer);\r
+ //\r
+ // Check buffer is enough\r
+ //\r
+ TemName = (CHAR16 *) Buffer;\r
+ ASSERT (Length < ((StrLen (TemName) * 4 + 1) * sizeof (CHAR16)));\r
+ //\r
+ // Convert Unicode String to Config String, e.g. "ABCD" => "0041004200430044"\r
+ //\r
+ for (; *TemName != L'\0'; TemName++) {\r
+ TemString += UnicodeValueToString (TemString, PREFIX_ZERO | RADIX_HEX, *TemName, 4);\r
+ }\r
break;\r
case 3:\r
- Status = BufToHexString (StringHeader, &Length, (UINT8 *) Buffer, BufferLen);\r
//\r
- // Convert the uppercase to lowercase since <HexAf> is defined in lowercase format.\r
+ // Convert Buffer to Hex String\r
//\r
- ToLower (StringHeader);\r
+ TemBuffer = ((UINT8 *) Buffer) + BufferLen - 1;\r
+ for (Index = 0; Index < BufferLen; Index ++, TemBuffer --) {\r
+ TemString += UnicodeValueToString (TemString, PREFIX_ZERO | RADIX_HEX, *TemBuffer, 2);\r
+ }\r
break;\r
default:\r
break;\r
}\r
\r
- ASSERT_EFI_ERROR (Status);\r
+ //\r
+ // Convert the uppercase to lowercase since <HexAf> is defined in lowercase format.\r
+ //\r
+ HiiToLower (StringHeader);\r
StrCat (Str, L"&");\r
\r
*SubStr = Str;\r
EFI_STRING Str;\r
UINT8 *Buf;\r
EFI_STATUS Status;\r
+ UINT8 DigitUint8;\r
+ UINTN Index;\r
+ CHAR16 TemStr[2];\r
\r
ASSERT (StringPtr != NULL && Number != NULL && Len != NULL);\r
- ASSERT (*StringPtr != 0);\r
+ ASSERT (*StringPtr != L'\0');\r
\r
Buf = NULL;\r
\r
TmpPtr = StringPtr;\r
- while (*StringPtr != 0 && *StringPtr != L'&') {\r
+ while (*StringPtr != L'\0' && *StringPtr != L'&') {\r
StringPtr++;\r
}\r
*Len = StringPtr - TmpPtr;\r
goto Exit;\r
}\r
CopyMem (Str, TmpPtr, *Len * sizeof (CHAR16));\r
- *(Str + *Len) = 0;\r
+ *(Str + *Len) = L'\0';\r
\r
Length = (Length + 1) / 2;\r
Buf = (UINT8 *) AllocateZeroPool (Length);\r
Status = EFI_OUT_OF_RESOURCES;\r
goto Exit;\r
}\r
-\r
- Status = HexStringToBuf (Buf, &Length, Str, NULL);\r
- if (EFI_ERROR (Status)) {\r
- goto Exit;\r
+ \r
+ Length = *Len;\r
+ ZeroMem (TemStr, sizeof (TemStr));\r
+ for (Index = 0; Index < Length; Index ++) {\r
+ TemStr[0] = Str[Length - Index - 1];\r
+ DigitUint8 = (UINT8) StrHexToUint64 (TemStr);\r
+ if ((Index & 1) == 0) {\r
+ Buf [Index/2] = DigitUint8;\r
+ } else {\r
+ Buf [Index/2] = (UINT8) ((Buf [Index/2] << 4) + DigitUint8);\r
+ }\r
}\r
\r
*Number = Buf;\r
if (Str != NULL) {\r
FreePool (Str);\r
}\r
+\r
return Status;\r
}\r
\r
UINT8 *Value;\r
EFI_STRING ValueStr;\r
EFI_STRING ConfigElement;\r
+ UINTN Index;\r
+ UINT8 *TemBuffer;\r
+ CHAR16 *TemString;\r
\r
if (This == NULL || Progress == NULL || Config == NULL) {\r
return EFI_INVALID_PARAMETER;\r
Status = EFI_OUT_OF_RESOURCES;\r
goto Exit;\r
}\r
-\r
- Status = BufToHexString (ValueStr, &Length, Value, Width);\r
- ASSERT_EFI_ERROR (Status);\r
- ToLower (ValueStr);\r
+ \r
+ TemString = ValueStr;\r
+ TemBuffer = Value + Width - 1;\r
+ for (Index = 0; Index < Width; Index ++, TemBuffer --) {\r
+ TemString += UnicodeValueToString (TemString, PREFIX_ZERO | RADIX_HEX, *TemBuffer, 2);\r
+ }\r
+ HiiToLower (ValueStr);\r
\r
FreePool (Value);\r
Value = NULL;\r
AsciiStrCpy (Language, (CHAR8 *) PackageHdr + HeaderSize - LanguageSize);\r
for (Link = PackageList->StringPkgHdr.ForwardLink; Link != &PackageList->StringPkgHdr; Link = Link->ForwardLink) {\r
StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);\r
- if (R8_EfiLibCompareLanguage (Language, StringPackage->StringPkgHdr->Language)) {\r
+ if (HiiCompareLanguage (Language, StringPackage->StringPkgHdr->Language)) {\r
FreePool (Language);\r
return EFI_UNSUPPORTED;\r
}\r
#include <Library/UefiLib.h>\r
#include <Library/PcdLib.h>\r
#include <Library/UefiRuntimeServicesTableLib.h>\r
+#include <Library/PrintLib.h>\r
\r
\r
#define HII_DATABASE_NOTIFY_GUID \\r
);\r
\r
\r
+/**\r
+ Compare whether two names of languages are identical.\r
+\r
+ @param Language1 Name of language 1\r
+ @param Language2 Name of language 2\r
+\r
+ @retval TRUE same\r
+ @retval FALSE not same\r
+\r
+**/\r
+BOOLEAN\r
+HiiCompareLanguage (\r
+ IN CHAR8 *Language1,\r
+ IN CHAR8 *Language2\r
+ )\r
+;\r
+\r
//\r
// Global variables\r
//\r
extern EFI_EVENT gHiiKeyboardLayoutChanged;\r
-\r
-#include "R8Lib.h"\r
-\r
#endif\r
String.c\r
Database.c\r
Font.c\r
- R8Lib.h\r
- R8Lib.c\r
-\r
\r
[Packages]\r
MdePkg/MdePkg.dec\r
UefiLib\r
PcdLib\r
UefiRuntimeServicesTableLib\r
+ PrintLib\r
\r
[Protocols]\r
gEfiDevicePathProtocolGuid ## SOMETIMES_CONSUMES\r
+++ /dev/null
-/** @file\r
-Implement a utility function named R8_EfiLibCompareLanguage.\r
-\r
- Copyright (c) 2007 - 2008, Intel Corporation\r
-\r
- All rights reserved. This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-\r
-**/\r
-\r
-#include "HiiDatabase.h"\r
-\r
-\r
-/**\r
- Compare whether two names of languages are identical.\r
-\r
- @param Language1 Name of language 1\r
- @param Language2 Name of language 2\r
-\r
- @retval TRUE same\r
- @retval FALSE not same\r
-\r
-**/\r
-BOOLEAN\r
-R8_EfiLibCompareLanguage (\r
- IN CHAR8 *Language1,\r
- IN CHAR8 *Language2\r
- )\r
-{\r
- //\r
- // Porting Guide:\r
- // This library interface is simply obsolete.\r
- // Include the source code to user code.\r
- //\r
- UINTN Index;\r
-\r
- for (Index = 0; (Language1[Index] != 0) && (Language2[Index] != 0); Index++) {\r
- if (Language1[Index] != Language2[Index]) {\r
- return FALSE;\r
- }\r
- }\r
-\r
- if (((Language1[Index] == 0) && (Language2[Index] == 0)) || \r
- ((Language1[Index] == 0) && (Language2[Index] != ';')) ||\r
- ((Language1[Index] == ';') && (Language2[Index] != 0)) ||\r
- ((Language1[Index] == ';') && (Language2[Index] != ';'))) {\r
- return TRUE;\r
- }\r
-\r
- return FALSE;\r
-}\r
-\r
-\r
-\r
+++ /dev/null
-/** @file\r
-Implement a utility function named R8_EfiLibCompareLanguage.\r
-\r
- Copyright (c) 2007 - 2008, Intel Corporation\r
-\r
- All rights reserved. This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-\r
-**/\r
-\r
-#ifndef __R8_LIB_H__\r
-#define __R8_LIB_H__\r
-\r
-/**\r
- Compare whether two names of languages are identical.\r
-\r
- @param Language1 Name of language 1\r
- @param Language2 Name of language 2\r
-\r
- @retval TRUE same\r
- @retval FALSE not same\r
-\r
-**/\r
-BOOLEAN\r
-R8_EfiLibCompareLanguage (\r
- IN CHAR8 *Language1,\r
- IN CHAR8 *Language2\r
- )\r
-;\r
-\r
-#endif\r
-\r
-\r
Link = Link->ForwardLink\r
) {\r
StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);\r
- if (R8_EfiLibCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {\r
+ if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {\r
Matched = TRUE;\r
break;\r
}\r
Link = Link->ForwardLink\r
) {\r
StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);\r
- if (R8_EfiLibCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {\r
+ if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {\r
Status = GetStringWorker (Private, StringPackage, StringId, String, StringSize, StringFontInfo);\r
if (Status != EFI_NOT_FOUND) {\r
return Status;\r
Link = Link->ForwardLink\r
) {\r
StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);\r
- if (R8_EfiLibCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {\r
+ if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {\r
OldPackageLen = StringPackage->StringPkgHdr->Header.Length;\r
Status = SetStringWorker (\r
Private,\r
Link1 = Link1->ForwardLink\r
) {\r
StringPackage = CR (Link1, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);\r
- if (R8_EfiLibCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) FirstLanguage)) {\r
+ if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) FirstLanguage)) {\r
Languages = StringPackage->StringPkgHdr->Language;\r
//\r
// Language is a series of ';' terminated strings, first one is primary\r
return EFI_INVALID_LANGUAGE;\r
}\r
\r
+/**\r
+ Compare whether two names of languages are identical.\r
+\r
+ @param Language1 Name of language 1\r
+ @param Language2 Name of language 2\r
+\r
+ @retval TRUE same\r
+ @retval FALSE not same\r
+\r
+**/\r
+BOOLEAN\r
+HiiCompareLanguage (\r
+ IN CHAR8 *Language1,\r
+ IN CHAR8 *Language2\r
+ )\r
+{\r
+ //\r
+ // Porting Guide:\r
+ // This library interface is simply obsolete.\r
+ // Include the source code to user code.\r
+ //\r
+ UINTN Index;\r
+\r
+ for (Index = 0; (Language1[Index] != 0) && (Language2[Index] != 0); Index++) {\r
+ if (Language1[Index] != Language2[Index]) {\r
+ return FALSE;\r
+ }\r
+ }\r
+\r
+ if (((Language1[Index] == 0) && (Language2[Index] == 0)) || \r
+ ((Language1[Index] == 0) && (Language2[Index] != ';')) ||\r
+ ((Language1[Index] == ';') && (Language2[Index] != 0)) ||\r
+ ((Language1[Index] == ';') && (Language2[Index] != ';'))) {\r
+ return TRUE;\r
+ }\r
+\r
+ return FALSE;\r
+}\r
UnicodeSPrint ( Str, 2 * IP4_STR_MAX_SIZE, L"%d.%d.%d.%d", Ip->Addr[0], Ip->Addr[1], Ip->Addr[2], Ip->Addr[3]);\r
}\r
\r
-/**\r
- Pop up an invalid notify which displays the message in Warning.\r
-\r
- @param[in] Warning The warning message.\r
-**/\r
-VOID\r
-PopUpInvalidNotify (\r
- IN CHAR16 *Warning\r
- )\r
-{\r
- EFI_INPUT_KEY Key;\r
-\r
- IfrLibCreatePopUp (1, &Key, Warning);\r
-}\r
-\r
/**\r
Update the list of iSCSI devices the iSCSI driver is controlling.\r
\r
EFI_IP_ADDRESS SubnetMask;\r
EFI_IP_ADDRESS Gateway;\r
EFI_STATUS Status;\r
+ EFI_INPUT_KEY Key;\r
\r
Private = ISCSI_FORM_CALLBACK_INFO_FROM_FORM_CALLBACK (This);\r
\r
\r
Status = gIScsiInitiatorName.Set (&gIScsiInitiatorName, &BufferSize, IScsiName);\r
if (EFI_ERROR (Status)) {\r
- PopUpInvalidNotify (L"Invalid iSCSI Name!");\r
+ CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid iSCSI Name!", NULL);\r
}\r
\r
break;\r
IScsiUnicodeStrToAsciiStr (IfrNvData->LocalIp, Ip4String);\r
Status = IScsiAsciiStrToIp (Ip4String, &HostIp.v4);\r
if (EFI_ERROR (Status) || !Ip4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {\r
- PopUpInvalidNotify (L"Invalid IP address!");\r
+ CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid IP address!", NULL);\r
Status = EFI_INVALID_PARAMETER;\r
} else {\r
CopyMem (&Private->Current->SessionConfigData.LocalIp, &HostIp.v4, sizeof (HostIp.v4));\r
IScsiUnicodeStrToAsciiStr (IfrNvData->SubnetMask, Ip4String);\r
Status = IScsiAsciiStrToIp (Ip4String, &SubnetMask.v4);\r
if (EFI_ERROR (Status) || ((SubnetMask.Addr[0] != 0) && (IScsiGetSubnetMaskPrefixLength (&SubnetMask.v4) == 0))) {\r
- PopUpInvalidNotify (L"Invalid Subnet Mask!");\r
+ CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid Subnet Mask!", NULL);\r
Status = EFI_INVALID_PARAMETER;\r
} else {\r
CopyMem (&Private->Current->SessionConfigData.SubnetMask, &SubnetMask.v4, sizeof (SubnetMask.v4));\r
IScsiUnicodeStrToAsciiStr (IfrNvData->Gateway, Ip4String);\r
Status = IScsiAsciiStrToIp (Ip4String, &Gateway.v4);\r
if (EFI_ERROR (Status) || ((Gateway.Addr[0] != 0) && !Ip4IsUnicast (NTOHL (Gateway.Addr[0]), 0))) {\r
- PopUpInvalidNotify (L"Invalid Gateway!");\r
+ CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid Gateway!", NULL);\r
Status = EFI_INVALID_PARAMETER;\r
} else {\r
CopyMem (&Private->Current->SessionConfigData.Gateway, &Gateway.v4, sizeof (Gateway.v4));\r
IScsiUnicodeStrToAsciiStr (IfrNvData->TargetIp, Ip4String);\r
Status = IScsiAsciiStrToIp (Ip4String, &HostIp.v4);\r
if (EFI_ERROR (Status) || !Ip4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {\r
- PopUpInvalidNotify (L"Invalid IP address!");\r
+ CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid IP address!", NULL);\r
Status = EFI_INVALID_PARAMETER;\r
} else {\r
CopyMem (&Private->Current->SessionConfigData.TargetIp, &HostIp.v4, sizeof (HostIp.v4));\r
IScsiUnicodeStrToAsciiStr (IfrNvData->TargetName, IScsiName);\r
Status = IScsiNormalizeName (IScsiName, AsciiStrLen (IScsiName));\r
if (EFI_ERROR (Status)) {\r
- PopUpInvalidNotify (L"Invalid iSCSI Name!");\r
+ CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid iSCSI Name!", NULL);\r
} else {\r
AsciiStrCpy (Private->Current->SessionConfigData.TargetName, IScsiName);\r
}\r
IScsiUnicodeStrToAsciiStr (IfrNvData->BootLun, LunString);\r
Status = IScsiAsciiStrToLun (LunString, (UINT8 *) &Lun);\r
if (EFI_ERROR (Status)) {\r
- PopUpInvalidNotify (L"Invalid LUN string!");\r
+ CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid LUN string!", NULL);\r
} else {\r
CopyMem (Private->Current->SessionConfigData.BootLun, &Lun, sizeof (Lun));\r
}\r
\r
if ((Gateway.Addr[0] != 0)) {\r
if (SubnetMask.Addr[0] == 0) {\r
- PopUpInvalidNotify (L"Gateway address is set but subnet mask is zero.");\r
+ CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Gateway address is set but subnet mask is zero.", NULL);\r
Status = EFI_INVALID_PARAMETER;\r
break;\r
} else if (!IP4_NET_EQUAL (HostIp.Addr[0], Gateway.Addr[0], SubnetMask.Addr[0])) {\r
- PopUpInvalidNotify (L"Local IP and Gateway are not in the same subnet.");\r
+ CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Local IP and Gateway are not in the same subnet.", NULL);\r
Status = EFI_INVALID_PARAMETER;\r
break;\r
}\r
if (!Private->Current->SessionConfigData.TargetInfoFromDhcp) {\r
CopyMem (&HostIp.v4, &Private->Current->SessionConfigData.TargetIp, sizeof (HostIp.v4));\r
if (!Ip4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {\r
- PopUpInvalidNotify (L"Target IP is invalid!");\r
+ CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Target IP is invalid!", NULL);\r
Status = EFI_INVALID_PARAMETER;\r
break;\r
}\r
\r
if (IfrNvData->CHAPType != ISCSI_CHAP_NONE) {\r
if ((IfrNvData->CHAPName[0] == '\0') || (IfrNvData->CHAPSecret[0] == '\0')) {\r
- PopUpInvalidNotify (L"CHAP Name or CHAP Secret is invalid!");\r
+ CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"CHAP Name or CHAP Secret is invalid!", NULL);\r
Status = EFI_INVALID_PARAMETER;\r
break;\r
}\r
if ((IfrNvData->CHAPType == ISCSI_CHAP_MUTUAL) &&\r
((IfrNvData->ReverseCHAPName[0] == '\0') || (IfrNvData->ReverseCHAPSecret[0] == '\0'))\r
) {\r
- PopUpInvalidNotify (L"Reverse CHAP Name or Reverse CHAP Secret is invalid!");\r
+ CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Reverse CHAP Name or Reverse CHAP Secret is invalid!", NULL);\r
Status = EFI_INVALID_PARAMETER;\r
break;\r
}\r
OUT UINT8 *Lun\r
)\r
{\r
- UINT32 Index;\r
- CHAR8 *LunUnitStr[4];\r
- CHAR8 Digit;\r
- UINTN Temp;\r
-\r
+ UINTN Index, IndexValue, IndexNum, SizeStr;\r
+ CHAR8 TemStr[2];\r
+ UINT8 TemValue;\r
+ UINT16 Value [4];\r
+ \r
ZeroMem (Lun, 8);\r
- ZeroMem (LunUnitStr, sizeof (LunUnitStr));\r
-\r
- Index = 0;\r
- LunUnitStr[0] = Str;\r
-\r
- if (!IsHexDigit ((UINT8 *) &Digit, *Str)) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- while (*Str != '\0') {\r
- //\r
- // Legal representations of LUN:\r
- // 4752-3A4F-6b7e-2F99,\r
- // 6734-9-156f-127,\r
- // 4186-9\r
- //\r
- if (*Str == '-') {\r
- *Str = '\0';\r
- Index++;\r
-\r
- if (*(Str + 1) != '\0') {\r
- if (!IsHexDigit ((UINT8 *) &Digit, *(Str + 1))) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- LunUnitStr[Index] = Str + 1;\r
+ ZeroMem (TemStr, 2);\r
+ ZeroMem ((UINT8 *) Value, sizeof (Value));\r
+ SizeStr = AsciiStrLen (Str); \r
+ IndexValue = 0;\r
+ IndexNum = 0;\r
+\r
+ for (Index = 0; Index < SizeStr; Index ++) {\r
+ TemStr[0] = Str[Index];\r
+ TemValue = (UINT8) AsciiStrHexToUint64 (TemStr);\r
+ if (TemValue == 0 && TemStr[0] != '0') {\r
+ if ((TemStr[0] != '-') || (IndexNum == 0)) {\r
+ //\r
+ // Invalid Lun Char\r
+ //\r
+ return EFI_INVALID_PARAMETER;\r
}\r
- } else if (!IsHexDigit ((UINT8 *) &Digit, *Str)) {\r
- return EFI_INVALID_PARAMETER;\r
}\r
-\r
- Str++;\r
- }\r
-\r
- for (Index = 0; (Index < 4) && (LunUnitStr[Index] != NULL); Index++) {\r
- if (AsciiStrLen (LunUnitStr[Index]) > 4) {\r
+ \r
+ if ((TemValue == 0) && (TemStr[0] == '-')) {\r
+ //\r
+ // Next Lun value\r
+ //\r
+ if (++IndexValue >= 4) {\r
+ //\r
+ // Max 4 Lun value\r
+ //\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ //\r
+ // Restart str index for the next lun value\r
+ //\r
+ IndexNum = 0;\r
+ continue;\r
+ }\r
+ \r
+ if (++IndexNum > 4) {\r
+ // \r
+ // Each Lun Str can't exceed size 4, because it will be as UINT16 value\r
+ //\r
return EFI_INVALID_PARAMETER;\r
}\r
-\r
- Temp = AsciiStrHexToUintn (LunUnitStr[Index]);\r
- *((UINT16 *) &Lun[Index * 2]) = HTONS (Temp);\r
+ \r
+ //\r
+ // Combine UINT16 value\r
+ //\r
+ Value[IndexValue] = (UINT16) ((Value[IndexValue] << 4) + TemValue);\r
}\r
-\r
+ \r
+ for (Index = 0; Index <= IndexValue; Index ++) {\r
+ *((UINT16 *) &Lun[Index * 2]) = HTONS (Value[Index]);\r
+ }\r
+ \r
return EFI_SUCCESS;\r
}\r
\r
)\r
{\r
UINTN Index;\r
- UINT32 HexCount;\r
- CHAR8 *HexBuf;\r
+ UINTN Length;\r
UINT8 Digit;\r
- UINT8 Byte;\r
-\r
- Digit = 0;\r
+ CHAR8 TemStr[2];\r
+ \r
+ ZeroMem (TemStr, sizeof (TemStr));\r
\r
//\r
// Find out how many hex characters the string has.\r
//\r
- HexBuf = HexStr;\r
- if ((HexBuf[0] == '0') && ((HexBuf[1] == 'x') || (HexBuf[1] == 'X'))) {\r
- HexBuf += 2;\r
- }\r
-\r
- for (Index = 0, HexCount = 0; IsHexDigit (&Digit, HexBuf[Index]); Index++, HexCount++)\r
- ;\r
-\r
- if (HexCount == 0) {\r
- *BinLength = 0;\r
- return EFI_SUCCESS;\r
- }\r
- //\r
- // Test if buffer is passed enough.\r
- //\r
- if (((HexCount + 1) / 2) > *BinLength) {\r
- *BinLength = (HexCount + 1) / 2;\r
- return EFI_BUFFER_TOO_SMALL;\r
+ if ((HexStr[0] == '0') && ((HexStr[1] == 'x') || (HexStr[1] == 'X'))) {\r
+ HexStr += 2;\r
}\r
+ \r
+ Length = AsciiStrLen (HexStr);\r
\r
- *BinLength = (HexCount + 1) / 2;\r
-\r
- for (Index = 0; Index < HexCount; Index++) {\r
-\r
- IsHexDigit (&Digit, HexBuf[HexCount - 1 - Index]);\r
-\r
+ for (Index = 0; Index < Length; Index ++) {\r
+ TemStr[0] = HexStr[Index];\r
+ Digit = (UINT8) AsciiStrHexToUint64 (TemStr);\r
+ if (Digit == 0 && TemStr[0] != '0') {\r
+ //\r
+ // Invalid Lun Char\r
+ //\r
+ break;\r
+ }\r
if ((Index & 1) == 0) {\r
- Byte = Digit;\r
+ BinBuffer [Index/2] = Digit;\r
} else {\r
- Byte = BinBuffer[*BinLength - 1 - Index / 2];\r
- Byte &= 0x0F;\r
- Byte = (UINT8) (Byte | (Digit << 4));\r
+ BinBuffer [Index/2] = (UINT8) ((BinBuffer [Index/2] << 4) + Digit);\r
}\r
-\r
- BinBuffer[*BinLength - 1 - Index / 2] = Byte;\r
}\r
+ \r
+ *BinLength = (UINT32) ((Index + 1)/2);\r
\r
return EFI_SUCCESS;\r
}\r
default:\r
if (ManualInput) {\r
if (HexInput) {\r
- if (!IsHexDigit (&Digital, Key.UnicodeChar)) {\r
+ if ((Key.UnicodeChar >= L'0') && (Key.UnicodeChar <= L'9')) {\r
+ Digital = (UINT8) (Key.UnicodeChar - L'0');\r
+ } else if ((Key.UnicodeChar >= L'A') && (Key.UnicodeChar <= L'F')) {\r
+ Digital = (UINT8) (Key.UnicodeChar - L'A' + 0x0A);\r
+ } else if ((Key.UnicodeChar >= L'a') && (Key.UnicodeChar <= L'f')) {\r
+ Digital = (UINT8) (Key.UnicodeChar - L'a' + 0x0A);\r
+ } else {\r
UpdateStatusBar (INPUT_ERROR, Question->QuestionFlags, TRUE);\r
break;\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) ((Dst [Index/2] << 4) + DigitUint8);\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) ((Dst [Index/2] << 4) + DigitUint8);\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
UINT16 DefaultId;\r
EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
FORM_BROWSER_STATEMENT *Statement;\r
+ CHAR16 TemStr[2];\r
+ UINT8 *DevicePathBuffer;\r
+ UINT8 DigitUint8;\r
\r
CopyMem (&LocalScreen, &gScreenDimensions, sizeof (EFI_SCREEN_DESCRIPTOR));\r
\r
}\r
BufferSize = StrLen (StringPtr) / 2;\r
DevicePath = AllocatePool (BufferSize);\r
+ \r
+ //\r
+ // Convert from Device Path String to DevicePath Buffer in the reverse order.\r
+ //\r
+ DevicePathBuffer = (UINT8 *) DevicePath;\r
+ for (Index = 0; StringPtr[Index] != L'\0'; Index ++) {\r
+ TemStr[0] = StringPtr[Index];\r
+ DigitUint8 = (UINT8) StrHexToUint64 (TemStr);\r
+ if (DigitUint8 == 0 && TemStr[0] != L'0') {\r
+ //\r
+ // Invalid Hex Char as the tail.\r
+ //\r
+ break;\r
+ }\r
+ if ((Index & 1) == 0) {\r
+ DevicePathBuffer [Index/2] = DigitUint8;\r
+ } else {\r
+ DevicePathBuffer [Index/2] = (UINT8) ((DevicePathBuffer [Index/2] << 4) + DigitUint8);\r
+ }\r
+ }\r
\r
- HexStringToBufInReverseOrder ((UINT8 *) DevicePath, &BufferSize, StringPtr);\r
Selection->Handle = HiiLibDevicePathToHiiHandle (DevicePath);\r
if (Selection->Handle == NULL) {\r
//\r