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
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
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
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
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
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
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