]> git.proxmox.com Git - mirror_edk2.git/blobdiff - PerformancePkg/Dp_App/DpUtilities.c
Refine the select language logic.
[mirror_edk2.git] / PerformancePkg / Dp_App / DpUtilities.c
index 74be7905a78c250b2edf0a38fc4b52914b6efee8..65efb80c80591bb908df38df3f20985e720b2389 100644 (file)
@@ -1,14 +1,14 @@
 /** @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 - 2013, 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
@@ -31,7 +31,6 @@
 #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
@@ -219,8 +218,11 @@ GetNameFromHandle (
   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
+  BestLanguage     = NULL;\r
+  PlatformLanguage = NULL;\r
 \r
   //\r
   // Method 1: Get the name string from image PDB\r
@@ -270,14 +272,24 @@ GetNameFromHandle (
     //\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
       return;\r
@@ -289,7 +301,7 @@ GetNameFromHandle (
                   &gEfiLoadedImageDevicePathProtocolGuid,\r
                   (VOID **) &LoadedImageDevicePath\r
                   );\r
-  if (!EFI_ERROR (Status)) {\r
+  if (!EFI_ERROR (Status) && (LoadedImageDevicePath != NULL)) {\r
     DevicePath = LoadedImageDevicePath;\r
 \r
     //\r
@@ -336,19 +348,12 @@ GetNameFromHandle (
       //\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 (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
     }\r
   }\r
@@ -421,6 +426,8 @@ PrintToken (
   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