]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Refine get default language logic for command "drivers".
authorydong10 <ydong10@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 10 Aug 2012 01:10:05 +0000 (01:10 +0000)
committerydong10 <ydong10@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 10 Aug 2012 01:10:05 +0000 (01:10 +0000)
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Jaben Carsey <Jaben.carsey@intel.com>
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13603 6f19259b-4bc3-4df7-8a09-765794883524

ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c
ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
ShellPkg/Library/UefiShellDriver1CommandsLib/OpenInfo.c

index 400b24046c52bacbd047f13e1547b6e9fd4b3162..e9e3d8204d651b2b46870c50d5f1618d41cce4a2 100644 (file)
@@ -779,6 +779,44 @@ GetGuidFromStringName(
   return (EFI_NOT_FOUND);\r
 }\r
 \r
+/**\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
+\r
+  @param[in] SupportedLanguages      The support languages for this driver.\r
+  @param[in] Iso639Language          Whether get language for ISO639.\r
+\r
+  @return                            The best support language for this driver.\r
+**/\r
+CHAR8 *\r
+GetBestLanguageForDriver (\r
+  IN CONST CHAR8  *SupportedLanguages, \r
+  IN BOOLEAN      Iso639Language\r
+  )\r
+{\r
+  CHAR8                         *LanguageVariable;\r
+  CHAR8                         *BestLanguage;\r
+\r
+  LanguageVariable = GetVariable (Iso639Language ? L"Lang" : L"PlatformLang", &gEfiGlobalVariableGuid);\r
+\r
+  BestLanguage = GetBestLanguage(\r
+                   SupportedLanguages,\r
+                   Iso639Language,\r
+                   (LanguageVariable != NULL) ? LanguageVariable : "",\r
+                   Iso639Language ? "en" : "en-US",\r
+                   NULL\r
+                   );\r
+\r
+  if (LanguageVariable != NULL) {\r
+    FreePool (LanguageVariable);\r
+  }\r
+\r
+  return BestLanguage;\r
+}\r
+\r
 /**\r
   Function to retrieve the driver name (if possible) from the ComponentName or\r
   ComponentName2 protocol\r
@@ -799,6 +837,9 @@ GetStringNameFromHandle(
   EFI_COMPONENT_NAME2_PROTOCOL  *CompNameStruct;\r
   EFI_STATUS                    Status;\r
   CHAR16                        *RetVal;\r
+  CHAR8                         *BestLang;\r
+\r
+  BestLang = NULL;\r
 \r
   Status = gBS->OpenProtocol(\r
     TheHandle,\r
@@ -808,7 +849,16 @@ 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
+    if (BestLang != NULL) {\r
+      FreePool (BestLang);\r
+      BestLang = NULL;\r
+    }\r
     if (!EFI_ERROR(Status)) {\r
       return (RetVal);\r
     }\r
@@ -821,7 +871,15 @@ 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
+    if (BestLang != NULL) {\r
+      FreePool (BestLang);\r
+    }\r
     if (!EFI_ERROR(Status)) {\r
       return (RetVal);\r
     }\r
index 18912e8f07c126a0470c2d3419ebe05551580473..1f7675b8b561d06224296f16be2d365b8a30108d 100644 (file)
@@ -221,19 +221,17 @@ ShellCommandRunDrivers (
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
-      Lang = ShellCommandLineGetValue(Package, L"-l");\r
-      if (Lang != NULL) {\r
-        Language = AllocateZeroPool(StrSize(Lang));\r
-        AsciiSPrint(Language, StrSize(Lang), "%S", Lang);\r
-      } else if (!ShellCommandLineGetFlag(Package, L"-l")){\r
-        ASSERT(Language == NULL);\r
-  //      Language = AllocateZeroPool(10);\r
-  //      AsciiSPrint(Language, 10, "en-us");\r
-      } else {\r
-        ASSERT(Language == NULL);\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"-l");\r
-        ShellCommandLineFreeVarList (Package);\r
-        return (SHELL_INVALID_PARAMETER);\r
+      if (ShellCommandLineGetFlag(Package, L"-l")){\r
+        Lang = ShellCommandLineGetValue(Package, L"-l");\r
+        if (Lang != NULL) {\r
+          Language = AllocateZeroPool(StrSize(Lang));\r
+          AsciiSPrint(Language, StrSize(Lang), "%S", Lang);\r
+        } else {\r
+          ASSERT(Language == NULL);\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"-l");\r
+          ShellCommandLineFreeVarList (Package);\r
+          return (SHELL_INVALID_PARAMETER);\r
+        }\r
       }\r
 \r
       if (ShellCommandLineGetFlag(Package, L"-sfo")) {\r
@@ -261,7 +259,7 @@ ShellCommandRunDrivers (
         DriverVersion = ReturnDriverVersion(*HandleWalker);\r
         DriverConfig  = ReturnDriverConfig(*HandleWalker);\r
         DriverDiag    = ReturnDriverDiag  (*HandleWalker);\r
-        Lang          = GetStringNameFromHandle(*HandleWalker, Language==NULL?"en":Language);\r
+        Lang          = GetStringNameFromHandle(*HandleWalker, Language);\r
 \r
         ShellPrintEx(\r
           -1,\r
index 0cb78403917c5b5c5fd5c3b5ea8341f58a8569e3..368948307efe76fba090722d4f9e940a9c506ca3 100644 (file)
@@ -99,7 +99,7 @@ TraverseHandleDatabase (
             default:                                    OpenTypeString = StringUnknown;   break;\r
           }\r
           HandleIndex = ConvertHandleToHandleIndex(OpenInfo[OpenInfoIndex].AgentHandle);\r
-          Name        = GetStringNameFromHandle(OpenInfo[OpenInfoIndex].AgentHandle, "en");\r
+          Name        = GetStringNameFromHandle(OpenInfo[OpenInfoIndex].AgentHandle, NULL);\r
           if (OpenInfo[OpenInfoIndex].ControllerHandle!=NULL) {\r
             ShellPrintHiiEx(\r
               -1,\r