/** @file\r
\r
-Copyright (c) 2007 - 2008, Intel Corporation\r
-All rights reserved. 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
-Module Name:\r
-\r
- PlatOverMngr.c\r
-\r
-Abstract:\r
-\r
A UI application to offer a UI interface in device manager to let user configue\r
platform override protocol to override the default algorithm for matching\r
drivers to controllers.\r
4. The UI application save all the mapping info in NV variables which will be consumed\r
by platform override protocol driver to publish the platform override protocol.\r
\r
+Copyright (c) 2007 - 2008, Intel Corporation\r
+All rights reserved. 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
\r
#include <PiDxe.h>\r
IN CHAR8 *Language\r
)\r
{\r
- CHAR8 *LangCode;\r
- LangCode = NULL;\r
+ CHAR8 *LangCode;\r
+ LangCode = NULL;\r
\r
//\r
- // check the input language is English\r
+ // Check the input language is English\r
//\r
if (AsciiStrnCmp (Language, "en-", 3) != 0) {\r
return NULL;\r
}\r
-\r
- //\r
- // Convert Language string from RFC 3066 to ISO 639-2\r
- //\r
- LangCode = AllocateZeroPool(4);\r
- AsciiStrCpy (LangCode, "eng");\r
\r
//\r
- // Check whether the converted language is supported in the SupportedLanguages list.\r
+ // Check SupportedLanguages format\r
//\r
- if (AsciiStrStr (SupportedLanguages, LangCode) == NULL) {\r
- FreePool (LangCode);\r
- return NULL;\r
+ if (AsciiStrStr (SupportedLanguages, "en-") != NULL) {\r
+ //\r
+ // Create RFC 3066 language\r
+ //\r
+ LangCode = AllocateZeroPool(AsciiStrSize (Language));\r
+ AsciiStrCpy (LangCode, Language);\r
+ } else if (AsciiStrStr (SupportedLanguages, "en") != NULL) {\r
+ //\r
+ // Create ISO 639-2 Language\r
+ //\r
+ LangCode = AllocateZeroPool(4);\r
+ AsciiStrCpy (LangCode, "eng"); \r
}\r
-\r
+ \r
return LangCode;\r
}\r
\r
if (ComponentName != NULL) {\r
if (ComponentName->GetDriverName != NULL) {\r
SupportedLanguage = ConvertComponentNameSupportLanguage (ComponentName->SupportedLanguages, mLanguage);\r
- Status = ComponentName->GetDriverName (\r
- ComponentName,\r
- SupportedLanguage,\r
- &DriverName\r
- );\r
- FreePool (SupportedLanguage);\r
+ if (SupportedLanguage != NULL) {\r
+ Status = ComponentName->GetDriverName (\r
+ ComponentName,\r
+ SupportedLanguage,\r
+ &DriverName\r
+ );\r
+ FreePool (SupportedLanguage);\r
+ }\r
}\r
} else if (ComponentName2 != NULL) {\r
if (ComponentName2->GetDriverName != NULL) {\r
if (EFI_ERROR (Status) || (DriverBindingHandleCount == 0)) {\r
return NULL;\r
}\r
-\r
+ \r
+ //\r
+ // Get the first Driver Binding handle which has the specific image handle.\r
+ //\r
for (Index = 0; Index < DriverBindingHandleCount; Index++) {\r
DriverBindingInterface = NULL;\r
Status = gBS->OpenProtocol (\r
}\r
}\r
\r
- //\r
- // If no Driver Binding Protocol instance is found\r
- //\r
FreePool (DriverBindingHandleBuffer);\r
return DriverBindingHandle;\r
}\r
EFI_CALLBACK_INFO *CallbackInfo;\r
EFI_HANDLE DriverHandle;\r
EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;\r
-\r
+ \r
//\r
// There should only be one HII protocol\r
//\r
//\r
Status = HiiLibCreateHiiDriverHandle (&DriverHandle);\r
if (EFI_ERROR (Status)) {\r
- return Status;\r
+ goto Finish;\r
}\r
CallbackInfo->DriverHandle = DriverHandle;\r
\r
&CallbackInfo->ConfigAccess\r
);\r
if (EFI_ERROR (Status)) {\r
- return Status;\r
+ goto Finish;\r
}\r
\r
//\r
);\r
FreePool (PackageList);\r
\r
+ if (EFI_ERROR (Status)) {\r
+ goto Finish;\r
+ }\r
+\r
//\r
// Locate ConfigRouting protocol\r
//\r
(VOID **) &CallbackInfo->HiiConfigRouting\r
);\r
if (EFI_ERROR (Status)) {\r
- return Status;\r
+ goto Finish;\r
}\r
\r
//\r
NULL,\r
NULL\r
);\r
+ if (EFI_ERROR (Status)) {\r
+ goto Finish;\r
+ }\r
\r
Status = HiiDatabase->RemovePackageList (HiiDatabase, CallbackInfo->RegisteredHandle);\r
if (EFI_ERROR (Status)) {\r
- return Status;\r
+ goto Finish;\r
}\r
-\r
+ \r
return EFI_SUCCESS;\r
+\r
+Finish:\r
+ if (CallbackInfo->DriverHandle != NULL) {\r
+ HiiLibDestroyHiiDriverHandle (CallbackInfo->DriverHandle);\r
+ }\r
+ if (CallbackInfo != NULL) {\r
+ FreePool (CallbackInfo);\r
+ }\r
+\r
+ return Status;\r
}\r