Revision: 19542
          http://sourceforge.net/p/edk2/code/19542
Author:   niruiyu
Date:     2015-12-25 02:45:57 +0000 (Fri, 25 Dec 2015)
Log Message:
-----------
MdeModulePkg/BootManagerMenu: Fix bug that boots to undesired option

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ruiyu Ni <[email protected]>
Reviewed-by: Eric Dong <[email protected]>

Modified Paths:
--------------
    trunk/edk2/MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenu.c

Modified: 
trunk/edk2/MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenu.c
===================================================================
--- trunk/edk2/MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenu.c    
2015-12-25 02:15:44 UTC (rev 19541)
+++ trunk/edk2/MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenu.c    
2015-12-25 02:45:57 UTC (rev 19542)
@@ -242,9 +242,50 @@
 
   return (BOOLEAN) (!EFI_ERROR (Status) && (BootOption->OptionNumber == 
BootManagerMenu.OptionNumber));
 }
- 
 
 /**
+  Return whether to ignore the boot option.
+
+  @param BootOption  Pointer to EFI_BOOT_MANAGER_LOAD_OPTION to check.
+
+  @retval TRUE  Ignore the boot optin.
+  @retval FALSE Do not ignore the boot option.
+**/
+BOOLEAN
+IgnoreBootOption (
+  IN   EFI_BOOT_MANAGER_LOAD_OPTION  *BootOption
+  )
+{
+  EFI_STATUS                    Status;
+  EFI_DEVICE_PATH_PROTOCOL      *ImageDevicePath;
+
+  //
+  // Ignore myself.
+  //
+  Status = gBS->HandleProtocol (gImageHandle, 
&gEfiLoadedImageDevicePathProtocolGuid, (VOID **) &ImageDevicePath);
+  ASSERT_EFI_ERROR (Status);
+  if (CompareMem (BootOption->FilePath, ImageDevicePath, GetDevicePathSize 
(ImageDevicePath)) == 0) {
+    return TRUE;
+  }
+
+  //
+  // Do not ignore Boot Manager Menu.
+  //
+  if (IsBootManagerMenu (BootOption)) {
+    return FALSE;
+  }
+
+  //
+  // Ignore the hidden/inactive boot option.
+  //
+  if (((BootOption->Attributes & LOAD_OPTION_HIDDEN) != 0) || 
((BootOption->Attributes & LOAD_OPTION_ACTIVE) == 0)) {
+    return TRUE;
+  }
+
+  return FALSE;
+}
+
+/**
   This funciton uses to initialize boot menu data
 
   @param   BootOption             Pointer to EFI_BOOT_MANAGER_LOAD_OPTION 
array.
@@ -262,18 +303,13 @@
   OUT  BOOT_MENU_POPUP_DATA          *BootMenuData
   )
 {
-  EFI_STATUS                    Status;
   UINTN                         Index;
   UINTN                         StrIndex;
-  EFI_DEVICE_PATH_PROTOCOL      *ImageDevicePath;
       
   if (BootOption == NULL || BootMenuData == NULL) {
     return EFI_INVALID_PARAMETER;
   }
 
-  Status = gBS->HandleProtocol (gImageHandle, 
&gEfiLoadedImageDevicePathProtocolGuid, (VOID **) &ImageDevicePath);
-  ASSERT_EFI_ERROR (Status);
-
   BootMenuData->TitleToken[0] = STRING_TOKEN 
(STR_BOOT_POPUP_MENU_TITLE_STRING);
   BootMenuData->PtrTokens     = AllocateZeroPool (BootOptionCount * sizeof 
(EFI_STRING_ID));
   ASSERT (BootMenuData->PtrTokens != NULL);
@@ -282,21 +318,10 @@
   // Skip boot option which created by BootNext Variable
   //
   for (StrIndex = 0, Index = 0; Index < BootOptionCount; Index++) {
-    //
-    // Don't display the hidden/inactive boot option except setup application.
-    //
-    if ((((BootOption[Index].Attributes & LOAD_OPTION_HIDDEN) != 0) || 
((BootOption[Index].Attributes & LOAD_OPTION_ACTIVE) == 0)) &&
-        !IsBootManagerMenu (&BootOption[Index])) {      
+    if (IgnoreBootOption (&BootOption[Index])) {
       continue;
     }
 
-    //
-    // Don't display myself
-    //
-    if (CompareMem (BootOption[Index].FilePath, ImageDevicePath, 
GetDevicePathSize (ImageDevicePath)) == 0) {
-      continue;
-    }
-
     ASSERT (BootOption[Index].Description != NULL);
     BootMenuData->PtrTokens[StrIndex++] = HiiSetString (
                                             gStringPackHandle, 
@@ -640,13 +665,10 @@
   ASSERT (BootOptions != NULL);
 
   for (ItemNum = 0, Index = 0; Index < BootOptionCount; Index++) {
-    //
-    // Don't display the hidden/inactive boot option except setup application.
-    //
-    if ((((BootOptions[Index].Attributes & LOAD_OPTION_HIDDEN) != 0) || 
((BootOptions[Index].Attributes & LOAD_OPTION_ACTIVE) == 0)) &&
-        !IsBootManagerMenu (&BootOptions[Index])) {      
+    if (IgnoreBootOption (&BootOptions[Index])) {
       continue;
     }
+
     if (ItemNum++ == SelectItem) {
       EfiBootManagerBoot (&BootOptions[Index]);
       break;


------------------------------------------------------------------------------
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to