EFI_STATUS Status;\r
LIST_ENTRY *Link;\r
HII_DATABASE_RECORD *Database;\r
+ UINT8 *DevicePathPkg;\r
UINT8 *CurrentDevicePath;\r
EFI_HANDLE DriverHandle;\r
EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess;\r
Link = Link->ForwardLink\r
) {\r
Database = CR (Link, HII_DATABASE_RECORD, DatabaseEntry, HII_DATABASE_RECORD_SIGNATURE);\r
- CurrentDevicePath = Database->PackageList->DevicePathPkg + sizeof (EFI_HII_PACKAGE_HEADER);\r
- if (CurrentDevicePath != NULL) {\r
+ \r
+ if ((DevicePathPkg = Database->PackageList->DevicePathPkg) != NULL) {\r
+ CurrentDevicePath = DevicePathPkg + sizeof (EFI_HII_PACKAGE_HEADER);\r
if (CompareMem (\r
DevicePath,\r
CurrentDevicePath,\r
EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess;\r
EFI_STRING AccessProgress;\r
EFI_STRING AccessResults;\r
- UINTN TmpSize;\r
\r
//\r
// For size reduction, please define PcdSupportFullConfigRoutingProtocol \r
// Generate a <ConfigRequest> with one <ConfigHdr> and zero <RequestElement>.\r
// It means extract all possible configurations from this specific driver.\r
//\r
- TmpSize = StrLen (L"GUID=&NAME=&PATH=");\r
- RequestSize = (TmpSize + 32 + StrLen (Storage->Name) * 4)\r
- * sizeof (CHAR16) + PathHdrSize;\r
+ RequestSize = (StrLen (L"GUID=&NAME=&PATH=") + 32) * sizeof (CHAR16) + PathHdrSize;\r
+ if (Storage->Name != NULL) {\r
+ RequestSize += StrLen (Storage->Name) * 4 * sizeof (CHAR16);\r
+ }\r
+ \r
ConfigRequest = (EFI_STRING) AllocateZeroPool (RequestSize);\r
if (ConfigRequest == NULL) {\r
SafeFreePool (PathHdr);\r
StrnCpy (StringPtr, L"NAME=", StrLen (L"NAME="));\r
StringPtr += StrLen (L"NAME=");\r
\r
- Length = (StrLen (Storage->Name) * 4 + 1) * sizeof (CHAR16);\r
- Status = UnicodeToConfigString (StringPtr, &Length, Storage->Name);\r
- ASSERT_EFI_ERROR (Status);\r
- StringPtr += StrLen (Storage->Name) * 4;\r
+ if (Storage->Name != NULL) {\r
+ Length = (StrLen (Storage->Name) * 4 + 1) * sizeof (CHAR16);\r
+ Status = UnicodeToConfigString (StringPtr, &Length, Storage->Name);\r
+ ASSERT_EFI_ERROR (Status);\r
+ StringPtr += StrLen (Storage->Name) * 4;\r
+ }\r
\r
*StringPtr = L'&';\r
StringPtr++;\r
EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
LIST_ENTRY *Link;\r
HII_DATABASE_RECORD *Database;\r
+ UINT8 *DevicePathPkg;\r
UINT8 *CurrentDevicePath;\r
EFI_HANDLE DriverHandle;\r
EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess;\r
Link = Link->ForwardLink\r
) {\r
Database = CR (Link, HII_DATABASE_RECORD, DatabaseEntry, HII_DATABASE_RECORD_SIGNATURE);\r
- CurrentDevicePath = Database->PackageList->DevicePathPkg + sizeof (EFI_HII_PACKAGE_HEADER);\r
- if (CurrentDevicePath != NULL) {\r
+\r
+ if ((DevicePathPkg = Database->PackageList->DevicePathPkg) != NULL) {\r
+ CurrentDevicePath = DevicePathPkg + sizeof (EFI_HII_PACKAGE_HEADER);\r
if (CompareMem (\r
DevicePath,\r
CurrentDevicePath,\r
Status = EFI_INVALID_PARAMETER;\r
goto Exit;\r
}\r
- while (*StringPtr++ != L'&');\r
+\r
+ while (*StringPtr != L'&' && *StringPtr != 0) {\r
+ StringPtr++;\r
+ }\r
+ if (*StringPtr == 0) {\r
+ *Progress = StringPtr;\r
+ Status = EFI_INVALID_PARAMETER;\r
+ goto Exit;\r
+ }\r
+ //\r
+ // Skip '&'\r
+ //\r
+ StringPtr++;\r
\r
//\r
// Copy <ConfigHdr> and an additional '&' to <ConfigResp>\r
Status = EFI_INVALID_PARAMETER;\r
goto Exit;\r
}\r
- while (*StringPtr++ != L'&');\r
+\r
+ while (*StringPtr != L'&' && *StringPtr != 0) {\r
+ StringPtr++;\r
+ }\r
+ if (*StringPtr == 0) {\r
+ *Progress = StringPtr;\r
+ Status = EFI_INVALID_PARAMETER;\r
+ goto Exit;\r
+ }\r
+ //\r
+ // Skip '&'\r
+ //\r
+ StringPtr++;\r
\r
//\r
// Parse each <ConfigElement> if exists\r
if (LineHeight < Cell[Index].Height) {\r
LineHeight = (UINTN) Cell[Index].Height;\r
}\r
- BaseLineOffset += (UINTN) Cell[Index].OffsetY;\r
\r
if ((Flags & EFI_HII_IGNORE_LINE_BREAK) == 0 &&\r
(Flags & EFI_HII_OUT_FLAG_WRAP) == 0 &&\r
if (Index > 0) {\r
RowInfo[RowIndex].EndIndex = Index - 1;\r
RowInfo[RowIndex].LineWidth = LineWidth - Cell[Index].AdvanceX;\r
- RowInfo[RowIndex].BaselineOffset = BaseLineOffset - Cell[Index].OffsetY;\r
+ RowInfo[RowIndex].BaselineOffset = BaseLineOffset;\r
if (LineHeight > Cell[Index - 1].Height) {\r
LineHeight = Cell[Index - 1].Height;\r
}\r
FontInfo->FontStyle = InfoOut.FontInfo.FontStyle;\r
\r
if (IsFontInfoExisted (Private, FontInfo, &InfoOut.FontInfoMask, LocalFontHandle, &GlobalFont)) {\r
+ //\r
+ // Test to guarantee all characters are available in the found font.\r
+ // \r
if (String != NULL) {\r
- //\r
- // Test to guarantee all characters are available in the found font.\r
- //\r
StringIn = String;\r
while (*StringIn != 0) {\r
Status = FindGlyphBlock (GlobalFont->FontPackage, *StringIn, NULL, NULL, NULL);\r
}\r
StringIn++;\r
}\r
-\r
- //\r
- // Write to output parameter\r
- //\r
- if (StringInfoOut != NULL) {\r
- StringInfoOutLen = sizeof (EFI_FONT_DISPLAY_INFO) - sizeof (EFI_FONT_INFO) + GlobalFont->FontInfoSize;\r
- *StringInfoOut = (EFI_FONT_DISPLAY_INFO *) AllocateZeroPool (StringInfoOutLen);\r
- if (*StringInfoOut == NULL) {\r
- Status = EFI_OUT_OF_RESOURCES;\r
- LocalFontHandle = NULL;\r
- goto Exit;\r
- }\r
- CopyMem (*StringInfoOut, &InfoOut, sizeof (EFI_FONT_DISPLAY_INFO));\r
- CopyMem (&(*StringInfoOut)->FontInfo, GlobalFont->FontInfo, GlobalFont->FontInfoSize);\r
+ }\r
+ //\r
+ // Write to output parameter\r
+ //\r
+ if (StringInfoOut != NULL) {\r
+ StringInfoOutLen = sizeof (EFI_FONT_DISPLAY_INFO) - sizeof (EFI_FONT_INFO) + GlobalFont->FontInfoSize;\r
+ *StringInfoOut = (EFI_FONT_DISPLAY_INFO *) AllocateZeroPool (StringInfoOutLen); \r
+ if (*StringInfoOut == NULL) {\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ LocalFontHandle = NULL;\r
+ goto Exit;\r
}\r
- LocalFontHandle = GlobalFont->Entry.ForwardLink;\r
-\r
- Status = EFI_SUCCESS;\r
- goto Exit;\r
+ \r
+ CopyMem (*StringInfoOut, &InfoOut, sizeof (EFI_FONT_DISPLAY_INFO));\r
+ CopyMem (&(*StringInfoOut)->FontInfo, GlobalFont->FontInfo, GlobalFont->FontInfoSize);\r
}\r
- } else {\r
- LocalFontHandle = NULL;\r
- }\r
+ \r
+ LocalFontHandle = GlobalFont->Entry.ForwardLink; \r
+ Status = EFI_SUCCESS;\r
+ goto Exit;\r
+ } \r
\r
Status = EFI_NOT_FOUND;\r
\r