Revision: 14629
          http://sourceforge.net/p/edk2/code/14629
Author:   ydong10
Date:     2013-09-05 03:02:14 +0000 (Thu, 05 Sep 2013)
Log Message:
-----------
Refine the select language logic.

Signed-off-by: Eric Dong <[email protected]>
Reviewed-by: Liming Gao <[email protected]>
Reviewed-by: Jaben Carsey <[email protected]>

Modified Paths:
--------------
    trunk/edk2/ShellPkg/Application/Shell/ShellProtocol.c
    trunk/edk2/ShellPkg/Include/Library/HandleParsingLib.h
    trunk/edk2/ShellPkg/Library/UefiDpLib/DpUtilities.c
    trunk/edk2/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c
    trunk/edk2/ShellPkg/Library/UefiShellDriver1CommandsLib/Dh.c
    trunk/edk2/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c
    
trunk/edk2/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h

Modified: trunk/edk2/ShellPkg/Application/Shell/ShellProtocol.c
===================================================================
--- trunk/edk2/ShellPkg/Application/Shell/ShellProtocol.c       2013-09-04 
10:30:27 UTC (rev 14628)
+++ trunk/edk2/ShellPkg/Application/Shell/ShellProtocol.c       2013-09-05 
03:02:14 UTC (rev 14629)
@@ -645,8 +645,6 @@
   UINTN                             LoopVar;
   CHAR16                            *DeviceNameToReturn;
   CHAR8                             *Lang;
-  CHAR8                             *TempChar;
-
   UINTN                             ParentControllerCount;
   EFI_HANDLE                        *ParentControllerBuffer;
   UINTN                             ParentDriverCount;
@@ -703,23 +701,7 @@
       if (EFI_ERROR(Status)) {
         continue;
       }
-      if (Language == NULL) {
-        Lang = AllocateZeroPool(AsciiStrSize(CompName2->SupportedLanguages));
-        if (Lang == NULL) {
-          return (EFI_OUT_OF_RESOURCES);
-        }
-        AsciiStrCpy(Lang, CompName2->SupportedLanguages);
-        TempChar = AsciiStrStr(Lang, ";");
-        if (TempChar != NULL){
-          *TempChar = CHAR_NULL;
-        }
-      } else {
-        Lang = AllocateZeroPool(AsciiStrSize(Language));
-        if (Lang == NULL) {
-          return (EFI_OUT_OF_RESOURCES);
-        }
-        AsciiStrCpy(Lang, Language);
-      }
+      Lang = GetBestLanguageForDriver(CompName2->SupportedLanguages, Language, 
FALSE);
       Status = CompName2->GetControllerName(CompName2, DeviceHandle, NULL, 
Lang, &DeviceNameToReturn);
       FreePool(Lang);
       Lang = NULL;
@@ -762,23 +744,7 @@
           if (EFI_ERROR(Status)) {
             continue;
           }
-          if (Language == NULL) {
-            Lang = 
AllocateZeroPool(AsciiStrSize(CompName2->SupportedLanguages));
-            if (Lang == NULL) {
-              return (EFI_OUT_OF_RESOURCES);
-            }
-            AsciiStrCpy(Lang, CompName2->SupportedLanguages);
-            TempChar = AsciiStrStr(Lang, ";");
-            if (TempChar != NULL){
-              *TempChar = CHAR_NULL;
-            }
-          } else {
-            Lang = AllocateZeroPool(AsciiStrSize(Language));
-            if (Lang == NULL) {
-              return (EFI_OUT_OF_RESOURCES);
-            }
-            AsciiStrCpy(Lang, Language);
-          }
+          Lang = GetBestLanguageForDriver(CompName2->SupportedLanguages, 
Language, FALSE);
           Status = CompName2->GetControllerName(CompName2, 
ParentControllerBuffer[LoopVar], DeviceHandle, Lang, &DeviceNameToReturn);
           FreePool(Lang);
           Lang = NULL;

Modified: trunk/edk2/ShellPkg/Include/Library/HandleParsingLib.h
===================================================================
--- trunk/edk2/ShellPkg/Include/Library/HandleParsingLib.h      2013-09-04 
10:30:27 UTC (rev 14628)
+++ trunk/edk2/ShellPkg/Include/Library/HandleParsingLib.h      2013-09-05 
03:02:14 UTC (rev 14629)
@@ -1,7 +1,7 @@
 /** @file
   Provides interface to advanced shell functionality for parsing both handle 
and protocol database.
 
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2013, Intel Corporation. All rights reserved.<BR>
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD 
License
   which accompanies this distribution.  The full text of the license may be 
found at
@@ -95,6 +95,27 @@
   IN CONST CHAR8      *Language
   );
 
+/**
+  Get best support language for this driver.
+  
+  First base on the user input language  to search, second base on the current 
+  platform used language to search, third get the first language from the 
+  support language list. The caller need to free the buffer of the best 
language.
+
+  @param[in] SupportedLanguages      The support languages for this driver.
+  @param[in] InputLanguage           The user input language.
+  @param[in] Iso639Language          Whether get language for ISO639.
+
+  @return                            The best support language for this driver.
+**/
+CHAR8 *
+EFIAPI
+GetBestLanguageForDriver (
+  IN CONST CHAR8  *SupportedLanguages,
+  IN CONST CHAR8  *InputLanguage,
+  IN BOOLEAN      Iso639Language
+  );
+
 #define HR_UNKNOWN                     0
 #define HR_IMAGE_HANDLE                BIT1
 #define HR_DRIVER_BINDING_HANDLE       BIT2 // has driver binding

Modified: trunk/edk2/ShellPkg/Library/UefiDpLib/DpUtilities.c
===================================================================
--- trunk/edk2/ShellPkg/Library/UefiDpLib/DpUtilities.c 2013-09-04 10:30:27 UTC 
(rev 14628)
+++ trunk/edk2/ShellPkg/Library/UefiDpLib/DpUtilities.c 2013-09-05 03:02:14 UTC 
(rev 14629)
@@ -23,6 +23,7 @@
 #include <Library/PcdLib.h>
 #include <Library/UefiLib.h>
 #include <Library/DevicePathLib.h>
+#include <Library/HandleParsingLib.h>
 
 #include <Pi/PiFirmwareFile.h>
 #include <Library/DxeServicesLib.h>
@@ -252,7 +253,7 @@
     //
     // Get the current platform language setting
     //
-    GetEfiGlobalVariable2 (L"PlatformLang", (VOID**)&PlatformLanguage, NULL);
+    PlatformLanguage = 
GetBestLanguageForDriver(ComponentName2->SupportedLanguages, NULL, FALSE);
     Status = ComponentName2->GetDriverName (
                                ComponentName2,
                                PlatformLanguage != NULL ? PlatformLanguage : 
"en-US",

Modified: 
trunk/edk2/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c
===================================================================
--- trunk/edk2/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c     
2013-09-04 10:30:27 UTC (rev 14628)
+++ trunk/edk2/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c     
2013-09-05 03:02:14 UTC (rev 14629)
@@ -1,7 +1,7 @@
 /** @file
   Provides interface to advanced shell functionality for parsing both handle 
and protocol database.
 
-  Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2013, Intel Corporation. All rights reserved.<BR>
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD 
License
   which accompanies this distribution.  The full text of the license may be 
found at
@@ -778,18 +778,21 @@
 /**
   Get best support language for this driver.
   
-  First base on the current platform used language to search,Second base on 
the 
-  default language to search. The caller need to free the buffer of the best 
-  language.
+  First base on the user input language  to search, second base on the current 
+  platform used language to search, third get the first language from the 
+  support language list. The caller need to free the buffer of the best 
language.
 
   @param[in] SupportedLanguages      The support languages for this driver.
+  @param[in] InputLanguage           The user input language.
   @param[in] Iso639Language          Whether get language for ISO639.
 
   @return                            The best support language for this driver.
 **/
 CHAR8 *
+EFIAPI
 GetBestLanguageForDriver (
-  IN CONST CHAR8  *SupportedLanguages, 
+  IN CONST CHAR8  *SupportedLanguages,
+  IN CONST CHAR8  *InputLanguage,
   IN BOOLEAN      Iso639Language
   )
 {
@@ -801,8 +804,9 @@
   BestLanguage = GetBestLanguage(
                    SupportedLanguages,
                    Iso639Language,
+                   (InputLanguage != NULL) ? InputLanguage : "",
                    (LanguageVariable != NULL) ? LanguageVariable : "",
-                   Iso639Language ? "en" : "en-US",
+                   SupportedLanguages,
                    NULL
                    );
 
@@ -845,12 +849,8 @@
     NULL,
     EFI_OPEN_PROTOCOL_GET_PROTOCOL);
   if (!EFI_ERROR(Status)) {
-    if (Language == NULL) {
-      BestLang = GetBestLanguageForDriver (CompNameStruct->SupportedLanguages, 
FALSE);
-      Language = BestLang;
-    }
-    Status = CompNameStruct->GetDriverName(CompNameStruct, (CHAR8*)Language, 
&RetVal);
-
+    BestLang = GetBestLanguageForDriver (CompNameStruct->SupportedLanguages, 
Language, FALSE);
+    Status = CompNameStruct->GetDriverName(CompNameStruct, BestLang, &RetVal);
     if (BestLang != NULL) {
       FreePool (BestLang);
       BestLang = NULL;
@@ -867,12 +867,8 @@
     NULL,
     EFI_OPEN_PROTOCOL_GET_PROTOCOL);
   if (!EFI_ERROR(Status)) {
-    if (Language == NULL) {
-      BestLang = GetBestLanguageForDriver (CompNameStruct->SupportedLanguages, 
FALSE);
-      Language = BestLang;
-    }
-    Status = CompNameStruct->GetDriverName(CompNameStruct, (CHAR8*)Language, 
&RetVal);
-    
+    BestLang = GetBestLanguageForDriver (CompNameStruct->SupportedLanguages, 
Language, FALSE);
+    Status = CompNameStruct->GetDriverName(CompNameStruct, BestLang, &RetVal);
     if (BestLang != NULL) {
       FreePool (BestLang);
     }

Modified: trunk/edk2/ShellPkg/Library/UefiShellDriver1CommandsLib/Dh.c
===================================================================
--- trunk/edk2/ShellPkg/Library/UefiShellDriver1CommandsLib/Dh.c        
2013-09-04 10:30:27 UTC (rev 14628)
+++ trunk/edk2/ShellPkg/Library/UefiShellDriver1CommandsLib/Dh.c        
2013-09-05 03:02:14 UTC (rev 14629)
@@ -60,7 +60,6 @@
   )
 {
   CHAR8                             *Lang;
-  CHAR8                             *TempChar;
   EFI_STATUS                        Status;
   EFI_COMPONENT_NAME2_PROTOCOL      *CompName2;
   CHAR16                            *NameToReturn;
@@ -87,23 +86,7 @@
   if (EFI_ERROR(Status)) {
     return (EFI_NOT_FOUND);
   }
-  if (Language == NULL) {
-    Lang = AllocateZeroPool(AsciiStrSize(CompName2->SupportedLanguages));
-    if (Lang == NULL) {
-      return (EFI_OUT_OF_RESOURCES);
-    }
-    AsciiStrCpy(Lang, CompName2->SupportedLanguages);
-    TempChar = AsciiStrStr(Lang, ";");
-    if (TempChar != NULL){
-      *TempChar = CHAR_NULL;
-    }
-  } else {
-    Lang = AllocateZeroPool(AsciiStrSize(Language));
-    if (Lang == NULL) {
-      return (EFI_OUT_OF_RESOURCES);
-    }
-    AsciiStrCpy(Lang, Language);
-  }
+  Lang = GetBestLanguageForDriver (CompName2->SupportedLanguages, Language, 
FALSE);
   Status = CompName2->GetDriverName(CompName2, Lang, &NameToReturn);
   FreePool(Lang);
 

Modified: trunk/edk2/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c
===================================================================
--- trunk/edk2/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c   
2013-09-04 10:30:27 UTC (rev 14628)
+++ trunk/edk2/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c   
2013-09-05 03:02:14 UTC (rev 14629)
@@ -1,7 +1,7 @@
 /** @file
   Main file for DrvDiag shell Driver1 function.
 
-  Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2013, Intel Corporation. All rights reserved.<BR>
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD 
License
   which accompanies this distribution.  The full text of the license may be 
found at
@@ -71,7 +71,6 @@
   UINTN                               HandleIndex1;
   UINTN                               HandleIndex2;
   CHAR8                               *Language;
-  CHAR8                               *TempChar;
   BOOLEAN                             Found;
 
   if ((ChildHandle != NULL && AllChilds) || (Mode >= TestModeMax)){
@@ -180,24 +179,8 @@
                 gImageHandle,
                 NULL,
                 EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-              if (!EFI_ERROR(Status)) {
-                if (Lang == NULL) {
-                  Language = 
AllocateZeroPool(AsciiStrSize(DriverDiagnostics2->SupportedLanguages));
-                  if (Language == NULL) {
-                    return (EFI_OUT_OF_RESOURCES);
-                  }
-                  AsciiStrCpy(Language, 
DriverDiagnostics2->SupportedLanguages);
-                  TempChar = AsciiStrStr(Language, ";");
-                  if (TempChar != NULL){
-                    *TempChar = CHAR_NULL;
-                  }
-                } else {
-                  Language = AllocateZeroPool(AsciiStrSize(Lang));
-                  if (Language == NULL) {
-                    return (EFI_OUT_OF_RESOURCES);
-                  }
-                  AsciiStrCpy(Language, Lang);
-                }
+              if (!EFI_ERROR(Status) && (DriverDiagnostics2 != NULL)) {
+                Language = 
GetBestLanguageForDriver(DriverDiagnostics2->SupportedLanguages, Lang, FALSE);
                 Found = TRUE;
                 Status = DriverDiagnostics2->RunDiagnostics(
                   DriverDiagnostics2,
@@ -220,23 +203,7 @@
                 NULL,
                 EFI_OPEN_PROTOCOL_GET_PROTOCOL);
               if (!EFI_ERROR(Status)) {
-                if (Lang == NULL) {
-                  Language = 
AllocateZeroPool(AsciiStrSize(DriverDiagnostics2->SupportedLanguages));
-                  if (Language == NULL) {
-                    return (EFI_OUT_OF_RESOURCES);
-                  }
-                  AsciiStrCpy(Language, 
DriverDiagnostics2->SupportedLanguages);
-                  TempChar = AsciiStrStr(Language, ";");
-                  if (TempChar != NULL){
-                    *TempChar = CHAR_NULL;
-                  }
-                } else {
-                  Language = AllocateZeroPool(AsciiStrSize(Lang));
-                  if (Language == NULL) {
-                    return (EFI_OUT_OF_RESOURCES);
-                  }
-                  AsciiStrCpy(Language, Lang);
-                }
+                Language = 
GetBestLanguageForDriver(DriverDiagnostics->SupportedLanguages, Lang, FALSE);
                 Status = DriverDiagnostics->RunDiagnostics(
                   DriverDiagnostics,
                   ControllerHandleList[ControllerHandleListLoop],

Modified: 
trunk/edk2/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h
===================================================================
--- 
trunk/edk2/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h
       2013-09-04 10:30:27 UTC (rev 14628)
+++ 
trunk/edk2/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h
       2013-09-05 03:02:14 UTC (rev 14629)
@@ -54,6 +54,7 @@
 #include <Library/PrintLib.h>
 #include <Library/HandleParsingLib.h>
 #include <Library/PeCoffGetEntryPointLib.h>
+#include <Library/HandleParsingLib.h>
 
 
 extern        EFI_HANDLE                        gShellDriver1HiiHandle;

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more!
Discover the easy way to master current and previous Microsoft technologies
and advance your career. Get an incredible 1,500+ hours of step-by-step
tutorial videos with LearnDevNow. Subscribe today and save!
http://pubads.g.doubleclick.net/gampad/clk?id=58041391&iu=/4140/ostg.clktrk
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to