/** @file\r
- * Utility functions used by the Dp application.\r
- *\r
- * Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>\r
- * 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
+ Utility functions used by the Dp application.\r
+\r
+ Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>\r
+ 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
#include <Library/BaseLib.h>\r
#include <Protocol/DriverBinding.h>\r
#include <Protocol/ComponentName2.h>\r
#include <Protocol/DevicePath.h>\r
-#include <Protocol/DevicePathToText.h>\r
\r
#include <Guid/Performance.h>\r
\r
UINTN StartIndex;\r
UINTN EndIndex;\r
\r
- ZeroMem (UnicodeBuffer, DXE_PERFORMANCE_STRING_LENGTH * sizeof (CHAR16));\r
+ ZeroMem (UnicodeBuffer, (DP_GAUGE_STRING_LENGTH + 1) * sizeof (CHAR16));\r
\r
if (PdbFileName == NULL) {\r
- StrCpy (UnicodeBuffer, L" ");\r
+ StrCpyS (UnicodeBuffer, DP_GAUGE_STRING_LENGTH + 1, L" ");\r
} else {\r
StartIndex = 0;\r
for (EndIndex = 0; PdbFileName[EndIndex] != 0; EndIndex++)\r
for (IndexA = StartIndex; IndexA < EndIndex; IndexA++) {\r
UnicodeBuffer[IndexU] = (CHAR16) PdbFileName[IndexA];\r
IndexU++;\r
- if (IndexU >= DXE_PERFORMANCE_STRING_LENGTH) {\r
- UnicodeBuffer[DXE_PERFORMANCE_STRING_LENGTH] = 0;\r
+ if (IndexU >= DP_GAUGE_STRING_LENGTH) {\r
+ UnicodeBuffer[DP_GAUGE_STRING_LENGTH] = 0;\r
break;\r
}\r
}\r
CHAR16 *NameString;\r
UINTN StringSize;\r
CHAR8 *PlatformLanguage;\r
+ CHAR8 *BestLanguage;\r
EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2;\r
- EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *DevicePathToText;\r
+\r
+ Image = NULL;\r
+ LoadedImageDevicePath = NULL;\r
+ DevicePath = NULL;\r
+ BestLanguage = NULL;\r
+ PlatformLanguage = NULL;\r
\r
//\r
// Method 1: Get the name string from image PDB\r
//\r
// Get the current platform language setting\r
//\r
- PlatformLanguage = GetEfiGlobalVariable (L"PlatformLang");\r
+ GetEfiGlobalVariable2 (L"PlatformLang", (VOID**)&PlatformLanguage, NULL);\r
+\r
+ BestLanguage = GetBestLanguage(\r
+ ComponentName2->SupportedLanguages,\r
+ FALSE,\r
+ PlatformLanguage,\r
+ ComponentName2->SupportedLanguages,\r
+ NULL\r
+ );\r
+\r
+ SafeFreePool (PlatformLanguage);\r
Status = ComponentName2->GetDriverName (\r
ComponentName2,\r
- PlatformLanguage != NULL ? PlatformLanguage : "en-US",\r
+ BestLanguage,\r
&StringPtr\r
);\r
+ SafeFreePool (BestLanguage);\r
if (!EFI_ERROR (Status)) {\r
- SafeFreePool (PlatformLanguage);\r
- StrnCpy (mGaugeString, StringPtr, DP_GAUGE_STRING_LENGTH);\r
- mGaugeString[DP_GAUGE_STRING_LENGTH] = 0;\r
+ StrnCpyS (\r
+ mGaugeString,\r
+ DP_GAUGE_STRING_LENGTH + 1,\r
+ StringPtr,\r
+ DP_GAUGE_STRING_LENGTH\r
+ );\r
return;\r
}\r
}\r
&gEfiLoadedImageDevicePathProtocolGuid,\r
(VOID **) &LoadedImageDevicePath\r
);\r
- if (!EFI_ERROR (Status)) {\r
+ if (!EFI_ERROR (Status) && (LoadedImageDevicePath != NULL)) {\r
DevicePath = LoadedImageDevicePath;\r
+ } else if (Image != NULL) {\r
+ DevicePath = Image->FilePath;\r
+ }\r
\r
+ if (DevicePath != NULL) {\r
//\r
- // Try to get image GUID from LoadedImageDevicePath protocol\r
+ // Try to get image GUID from image DevicePath\r
//\r
NameGuid = NULL;\r
while (!IsDevicePathEndType (DevicePath)) {\r
//\r
// Method 3. Get the name string from FFS UI section\r
//\r
- StrnCpy (mGaugeString, NameString, DP_GAUGE_STRING_LENGTH);\r
- mGaugeString[DP_GAUGE_STRING_LENGTH] = 0;\r
+ StrnCpyS (\r
+ mGaugeString,\r
+ DP_GAUGE_STRING_LENGTH + 1,\r
+ NameString,\r
+ DP_GAUGE_STRING_LENGTH\r
+ );\r
FreePool (NameString);\r
} else {\r
//\r
//\r
// Method 5: Get the name string from image DevicePath\r
//\r
- Status = gBS->LocateProtocol (\r
- &gEfiDevicePathToTextProtocolGuid,\r
- NULL,\r
- (VOID **) &DevicePathToText\r
- );\r
- if (!EFI_ERROR (Status)) {\r
- NameString = DevicePathToText->ConvertDevicePathToText (LoadedImageDevicePath, TRUE, FALSE);\r
- if (NameString != NULL) {\r
- StrnCpy (mGaugeString, NameString, DP_GAUGE_STRING_LENGTH);\r
- mGaugeString[DP_GAUGE_STRING_LENGTH] = 0;\r
- FreePool (NameString);\r
- return;\r
- }\r
+ NameString = ConvertDevicePathToText (DevicePath, TRUE, FALSE);\r
+ if (NameString != NULL) {\r
+ StrnCpyS (\r
+ mGaugeString,\r
+ DP_GAUGE_STRING_LENGTH + 1,\r
+ NameString,\r
+ DP_GAUGE_STRING_LENGTH\r
+ );\r
+ FreePool (NameString);\r
+ return;\r
}\r
}\r
}\r
//\r
StringPtr = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_ERROR_NAME), NULL);\r
ASSERT (StringPtr != NULL);\r
- StrCpy (mGaugeString, StringPtr);\r
+ StrCpyS (mGaugeString, DP_GAUGE_STRING_LENGTH + 1, StringPtr);\r
FreePool (StringPtr);\r
return;\r
}\r
\r
**/\r
UINTN\r
+EFIAPI\r
PrintToken (\r
IN UINT16 Token,\r
...\r
SetMem( mPrintTokenBuffer, BufferSize, 0);\r
\r
Return = UnicodeVSPrint (mPrintTokenBuffer, BufferSize, StringPtr, Marker);\r
+ VA_END (Marker);\r
+ \r
if (Return > 0 && gST->ConOut != NULL) {\r
gST->ConOut->OutputString (gST->ConOut, mPrintTokenBuffer);\r
}\r