]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Refine the select language logic.
authorEric Dong <eric.dong@intel.com>
Thu, 5 Sep 2013 03:02:14 +0000 (03:02 +0000)
committerydong10 <ydong10@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 5 Sep 2013 03:02:14 +0000 (03:02 +0000)
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Jaben Carsey <Jaben.carsey@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14629 6f19259b-4bc3-4df7-8a09-765794883524

ShellPkg/Application/Shell/ShellProtocol.c
ShellPkg/Include/Library/HandleParsingLib.h
ShellPkg/Library/UefiDpLib/DpUtilities.c
ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c
ShellPkg/Library/UefiShellDriver1CommandsLib/Dh.c
ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c
ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h

index e1aadb845d4eb7c49a971d9ba1919efced0c84f7..89132969b6aad9ab5523016f004b61b762d42c17 100644 (file)
@@ -645,8 +645,6 @@ EfiShellGetDeviceName(
   UINTN                             LoopVar;\r
   CHAR16                            *DeviceNameToReturn;\r
   CHAR8                             *Lang;\r
-  CHAR8                             *TempChar;\r
-\r
   UINTN                             ParentControllerCount;\r
   EFI_HANDLE                        *ParentControllerBuffer;\r
   UINTN                             ParentDriverCount;\r
@@ -703,23 +701,7 @@ EfiShellGetDeviceName(
       if (EFI_ERROR(Status)) {\r
         continue;\r
       }\r
-      if (Language == NULL) {\r
-        Lang = AllocateZeroPool(AsciiStrSize(CompName2->SupportedLanguages));\r
-        if (Lang == NULL) {\r
-          return (EFI_OUT_OF_RESOURCES);\r
-        }\r
-        AsciiStrCpy(Lang, CompName2->SupportedLanguages);\r
-        TempChar = AsciiStrStr(Lang, ";");\r
-        if (TempChar != NULL){\r
-          *TempChar = CHAR_NULL;\r
-        }\r
-      } else {\r
-        Lang = AllocateZeroPool(AsciiStrSize(Language));\r
-        if (Lang == NULL) {\r
-          return (EFI_OUT_OF_RESOURCES);\r
-        }\r
-        AsciiStrCpy(Lang, Language);\r
-      }\r
+      Lang = GetBestLanguageForDriver(CompName2->SupportedLanguages, Language, FALSE);\r
       Status = CompName2->GetControllerName(CompName2, DeviceHandle, NULL, Lang, &DeviceNameToReturn);\r
       FreePool(Lang);\r
       Lang = NULL;\r
@@ -762,23 +744,7 @@ EfiShellGetDeviceName(
           if (EFI_ERROR(Status)) {\r
             continue;\r
           }\r
-          if (Language == NULL) {\r
-            Lang = AllocateZeroPool(AsciiStrSize(CompName2->SupportedLanguages));\r
-            if (Lang == NULL) {\r
-              return (EFI_OUT_OF_RESOURCES);\r
-            }\r
-            AsciiStrCpy(Lang, CompName2->SupportedLanguages);\r
-            TempChar = AsciiStrStr(Lang, ";");\r
-            if (TempChar != NULL){\r
-              *TempChar = CHAR_NULL;\r
-            }\r
-          } else {\r
-            Lang = AllocateZeroPool(AsciiStrSize(Language));\r
-            if (Lang == NULL) {\r
-              return (EFI_OUT_OF_RESOURCES);\r
-            }\r
-            AsciiStrCpy(Lang, Language);\r
-          }\r
+          Lang = GetBestLanguageForDriver(CompName2->SupportedLanguages, Language, FALSE);\r
           Status = CompName2->GetControllerName(CompName2, ParentControllerBuffer[LoopVar], DeviceHandle, Lang, &DeviceNameToReturn);\r
           FreePool(Lang);\r
           Lang = NULL;\r
index 8c0b81d12c34a9c46bb9ed486565044f2ae8b40d..c2e182bd9d955395c5ec1e8b57ca90076dab6384 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Provides interface to advanced shell functionality for parsing both handle and protocol database.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 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
@@ -95,6 +95,27 @@ GetStringNameFromHandle(
   IN CONST CHAR8      *Language\r
   );\r
 \r
+/**\r
+  Get best support language for this driver.\r
+  \r
+  First base on the user input language  to search, second base on the current \r
+  platform used language to search, third get the first language from the \r
+  support language list. The caller need to free the buffer of the best language.\r
+\r
+  @param[in] SupportedLanguages      The support languages for this driver.\r
+  @param[in] InputLanguage           The user input language.\r
+  @param[in] Iso639Language          Whether get language for ISO639.\r
+\r
+  @return                            The best support language for this driver.\r
+**/\r
+CHAR8 *\r
+EFIAPI\r
+GetBestLanguageForDriver (\r
+  IN CONST CHAR8  *SupportedLanguages,\r
+  IN CONST CHAR8  *InputLanguage,\r
+  IN BOOLEAN      Iso639Language\r
+  );\r
+\r
 #define HR_UNKNOWN                     0\r
 #define HR_IMAGE_HANDLE                BIT1\r
 #define HR_DRIVER_BINDING_HANDLE       BIT2 // has driver binding\r
index 57c81288da875d7406e2ebf2f8d0812863be611f..f7e17c252cd09c031b3482d57ffa47f787b549c4 100644 (file)
@@ -23,6 +23,7 @@
 #include <Library/PcdLib.h>\r
 #include <Library/UefiLib.h>\r
 #include <Library/DevicePathLib.h>\r
+#include <Library/HandleParsingLib.h>\r
 \r
 #include <Pi/PiFirmwareFile.h>\r
 #include <Library/DxeServicesLib.h>\r
@@ -252,7 +253,7 @@ GetNameFromHandle (
     //\r
     // Get the current platform language setting\r
     //\r
-    GetEfiGlobalVariable2 (L"PlatformLang", (VOID**)&PlatformLanguage, NULL);\r
+    PlatformLanguage = GetBestLanguageForDriver(ComponentName2->SupportedLanguages, NULL, FALSE);\r
     Status = ComponentName2->GetDriverName (\r
                                ComponentName2,\r
                                PlatformLanguage != NULL ? PlatformLanguage : "en-US",\r
index 0c78d0da20253d98d42802c5c8c5b6efd1aae9c9..515fab3294d1dd4ce2c93168df937f3c04c9fbc3 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Provides interface to advanced shell functionality for parsing both handle and protocol database.\r
 \r
-  Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 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
@@ -778,18 +778,21 @@ GetGuidFromStringName(
 /**\r
   Get best support language for this driver.\r
   \r
-  First base on the current platform used language to search,Second base on the \r
-  default language to search. The caller need to free the buffer of the best \r
-  language.\r
+  First base on the user input language  to search, second base on the current \r
+  platform used language to search, third get the first language from the \r
+  support language list. The caller need to free the buffer of the best language.\r
 \r
   @param[in] SupportedLanguages      The support languages for this driver.\r
+  @param[in] InputLanguage           The user input language.\r
   @param[in] Iso639Language          Whether get language for ISO639.\r
 \r
   @return                            The best support language for this driver.\r
 **/\r
 CHAR8 *\r
+EFIAPI\r
 GetBestLanguageForDriver (\r
-  IN CONST CHAR8  *SupportedLanguages, \r
+  IN CONST CHAR8  *SupportedLanguages,\r
+  IN CONST CHAR8  *InputLanguage,\r
   IN BOOLEAN      Iso639Language\r
   )\r
 {\r
@@ -801,8 +804,9 @@ GetBestLanguageForDriver (
   BestLanguage = GetBestLanguage(\r
                    SupportedLanguages,\r
                    Iso639Language,\r
+                   (InputLanguage != NULL) ? InputLanguage : "",\r
                    (LanguageVariable != NULL) ? LanguageVariable : "",\r
-                   Iso639Language ? "en" : "en-US",\r
+                   SupportedLanguages,\r
                    NULL\r
                    );\r
 \r
@@ -845,12 +849,8 @@ GetStringNameFromHandle(
     NULL,\r
     EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
   if (!EFI_ERROR(Status)) {\r
-    if (Language == NULL) {\r
-      BestLang = GetBestLanguageForDriver (CompNameStruct->SupportedLanguages, FALSE);\r
-      Language = BestLang;\r
-    }\r
-    Status = CompNameStruct->GetDriverName(CompNameStruct, (CHAR8*)Language, &RetVal);\r
-\r
+    BestLang = GetBestLanguageForDriver (CompNameStruct->SupportedLanguages, Language, FALSE);\r
+    Status = CompNameStruct->GetDriverName(CompNameStruct, BestLang, &RetVal);\r
     if (BestLang != NULL) {\r
       FreePool (BestLang);\r
       BestLang = NULL;\r
@@ -867,12 +867,8 @@ GetStringNameFromHandle(
     NULL,\r
     EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
   if (!EFI_ERROR(Status)) {\r
-    if (Language == NULL) {\r
-      BestLang = GetBestLanguageForDriver (CompNameStruct->SupportedLanguages, FALSE);\r
-      Language = BestLang;\r
-    }\r
-    Status = CompNameStruct->GetDriverName(CompNameStruct, (CHAR8*)Language, &RetVal);\r
-    \r
+    BestLang = GetBestLanguageForDriver (CompNameStruct->SupportedLanguages, Language, FALSE);\r
+    Status = CompNameStruct->GetDriverName(CompNameStruct, BestLang, &RetVal);\r
     if (BestLang != NULL) {\r
       FreePool (BestLang);\r
     }\r
index bfbd8d76b03867b6b918b380690ce9265e9d7d98..1bb3191f4153e6a994ffca07fd4efdabc507b4ab 100644 (file)
@@ -60,7 +60,6 @@ GetDriverName (
   )\r
 {\r
   CHAR8                             *Lang;\r
-  CHAR8                             *TempChar;\r
   EFI_STATUS                        Status;\r
   EFI_COMPONENT_NAME2_PROTOCOL      *CompName2;\r
   CHAR16                            *NameToReturn;\r
@@ -87,23 +86,7 @@ GetDriverName (
   if (EFI_ERROR(Status)) {\r
     return (EFI_NOT_FOUND);\r
   }\r
-  if (Language == NULL) {\r
-    Lang = AllocateZeroPool(AsciiStrSize(CompName2->SupportedLanguages));\r
-    if (Lang == NULL) {\r
-      return (EFI_OUT_OF_RESOURCES);\r
-    }\r
-    AsciiStrCpy(Lang, CompName2->SupportedLanguages);\r
-    TempChar = AsciiStrStr(Lang, ";");\r
-    if (TempChar != NULL){\r
-      *TempChar = CHAR_NULL;\r
-    }\r
-  } else {\r
-    Lang = AllocateZeroPool(AsciiStrSize(Language));\r
-    if (Lang == NULL) {\r
-      return (EFI_OUT_OF_RESOURCES);\r
-    }\r
-    AsciiStrCpy(Lang, Language);\r
-  }\r
+  Lang = GetBestLanguageForDriver (CompName2->SupportedLanguages, Language, FALSE);\r
   Status = CompName2->GetDriverName(CompName2, Lang, &NameToReturn);\r
   FreePool(Lang);\r
 \r
index 986dc3a05625054490cd8c0a65d6fe620f0dda8e..c3c1b575e8a0269c8f9cfbf63cda21e5f773cc9f 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for DrvDiag shell Driver1 function.\r
 \r
-  Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 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
@@ -71,7 +71,6 @@ DoDiagnostics (
   UINTN                               HandleIndex1;\r
   UINTN                               HandleIndex2;\r
   CHAR8                               *Language;\r
-  CHAR8                               *TempChar;\r
   BOOLEAN                             Found;\r
 \r
   if ((ChildHandle != NULL && AllChilds) || (Mode >= TestModeMax)){\r
@@ -180,24 +179,8 @@ DoDiagnostics (
                 gImageHandle,\r
                 NULL,\r
                 EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
-              if (!EFI_ERROR(Status)) {\r
-                if (Lang == NULL) {\r
-                  Language = AllocateZeroPool(AsciiStrSize(DriverDiagnostics2->SupportedLanguages));\r
-                  if (Language == NULL) {\r
-                    return (EFI_OUT_OF_RESOURCES);\r
-                  }\r
-                  AsciiStrCpy(Language, DriverDiagnostics2->SupportedLanguages);\r
-                  TempChar = AsciiStrStr(Language, ";");\r
-                  if (TempChar != NULL){\r
-                    *TempChar = CHAR_NULL;\r
-                  }\r
-                } else {\r
-                  Language = AllocateZeroPool(AsciiStrSize(Lang));\r
-                  if (Language == NULL) {\r
-                    return (EFI_OUT_OF_RESOURCES);\r
-                  }\r
-                  AsciiStrCpy(Language, Lang);\r
-                }\r
+              if (!EFI_ERROR(Status) && (DriverDiagnostics2 != NULL)) {\r
+                Language = GetBestLanguageForDriver(DriverDiagnostics2->SupportedLanguages, Lang, FALSE);\r
                 Found = TRUE;\r
                 Status = DriverDiagnostics2->RunDiagnostics(\r
                   DriverDiagnostics2,\r
@@ -220,23 +203,7 @@ DoDiagnostics (
                 NULL,\r
                 EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
               if (!EFI_ERROR(Status)) {\r
-                if (Lang == NULL) {\r
-                  Language = AllocateZeroPool(AsciiStrSize(DriverDiagnostics2->SupportedLanguages));\r
-                  if (Language == NULL) {\r
-                    return (EFI_OUT_OF_RESOURCES);\r
-                  }\r
-                  AsciiStrCpy(Language, DriverDiagnostics2->SupportedLanguages);\r
-                  TempChar = AsciiStrStr(Language, ";");\r
-                  if (TempChar != NULL){\r
-                    *TempChar = CHAR_NULL;\r
-                  }\r
-                } else {\r
-                  Language = AllocateZeroPool(AsciiStrSize(Lang));\r
-                  if (Language == NULL) {\r
-                    return (EFI_OUT_OF_RESOURCES);\r
-                  }\r
-                  AsciiStrCpy(Language, Lang);\r
-                }\r
+                Language = GetBestLanguageForDriver(DriverDiagnostics->SupportedLanguages, Lang, FALSE);\r
                 Status = DriverDiagnostics->RunDiagnostics(\r
                   DriverDiagnostics,\r
                   ControllerHandleList[ControllerHandleListLoop],\r
index 46ba8fdd8f6cd64aa73e107d3821760acba613d9..8962d3289708a4e71a86f01daf0c15ccb4fe1319 100644 (file)
@@ -54,6 +54,7 @@
 #include <Library/PrintLib.h>\r
 #include <Library/HandleParsingLib.h>\r
 #include <Library/PeCoffGetEntryPointLib.h>\r
+#include <Library/HandleParsingLib.h>\r
 \r
 \r
 extern        EFI_HANDLE                        gShellDriver1HiiHandle;\r