]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
Keep consistent about the return value between the caller and callee.
[mirror_edk2.git] / MdeModulePkg / Universal / SetupBrowserDxe / Setup.c
index c7c7f9ae43eb780aede99081c6d567d51693f717..11c9589cebad2c5130d30c1b704c1ece19ccbb6f 100644 (file)
@@ -4902,21 +4902,27 @@ IsBrowserDataModified (
   LIST_ENTRY              *Link;\r
   FORM_BROWSER_FORMSET    *FormSet;\r
 \r
-  if (gCurrentSelection == NULL) {\r
-    return FALSE;\r
-  }\r
-\r
   switch (gBrowserSettingScope) {\r
     case FormLevel:\r
+      if (gCurrentSelection == NULL) {\r
+        return FALSE;\r
+      }\r
       return IsNvUpdateRequiredForForm (gCurrentSelection->Form);\r
 \r
     case FormSetLevel:\r
+      if (gCurrentSelection == NULL) {\r
+        return FALSE;\r
+      }\r
       return IsNvUpdateRequiredForFormSet (gCurrentSelection->FormSet);\r
 \r
     case SystemLevel:\r
       Link = GetFirstNode (&gBrowserFormSetList);\r
       while (!IsNull (&gBrowserFormSetList, Link)) {\r
         FormSet = FORM_BROWSER_FORMSET_FROM_LINK (Link);\r
+        if (!ValidateFormSet(FormSet)) {\r
+          continue;\r
+        }\r
+\r
         if (IsNvUpdateRequiredForFormSet (FormSet)) {\r
           return TRUE;\r
         }\r
@@ -4946,19 +4952,27 @@ ExecuteAction (
   IN UINT16        DefaultId\r
   )\r
 {\r
-  EFI_STATUS Status;\r
+  EFI_STATUS              Status;\r
+  FORM_BROWSER_FORMSET    *FormSet;\r
+  FORM_BROWSER_FORM       *Form;\r
 \r
-  if (gCurrentSelection == NULL) {\r
+  if (gBrowserSettingScope < SystemLevel && gCurrentSelection == NULL) {\r
     return EFI_NOT_READY;\r
   }\r
 \r
-  Status = EFI_SUCCESS;\r
+  Status  = EFI_SUCCESS;\r
+  FormSet = NULL;\r
+  Form    = NULL;\r
+  if (gBrowserSettingScope < SystemLevel) {\r
+    FormSet = gCurrentSelection->FormSet;\r
+    Form    = gCurrentSelection->Form; \r
+  }\r
 \r
   //\r
   // Executet the discard action.\r
   //\r
   if ((Action & BROWSER_ACTION_DISCARD) != 0) {\r
-    Status = DiscardForm (gCurrentSelection->FormSet, gCurrentSelection->Form, gBrowserSettingScope);\r
+    Status = DiscardForm (FormSet, Form, gBrowserSettingScope);\r
     if (EFI_ERROR (Status)) {\r
       return Status;\r
     }\r
@@ -4968,7 +4982,7 @@ ExecuteAction (
   // Executet the difault action.\r
   //\r
   if ((Action & BROWSER_ACTION_DEFAULT) != 0) {\r
-    Status = ExtractDefault (gCurrentSelection->FormSet, gCurrentSelection->Form, DefaultId, gBrowserSettingScope, GetDefaultForAll, NULL, FALSE);\r
+    Status = ExtractDefault (FormSet, Form, DefaultId, gBrowserSettingScope, GetDefaultForAll, NULL, FALSE);\r
     if (EFI_ERROR (Status)) {\r
       return Status;\r
     }\r
@@ -4978,7 +4992,7 @@ ExecuteAction (
   // Executet the submit action.\r
   //\r
   if ((Action & BROWSER_ACTION_SUBMIT) != 0) {\r
-    Status = SubmitForm (gCurrentSelection->FormSet, gCurrentSelection->Form, gBrowserSettingScope);\r
+    Status = SubmitForm (FormSet, Form, gBrowserSettingScope);\r
     if (EFI_ERROR (Status)) {\r
       return Status;\r
     }\r
@@ -4995,7 +5009,7 @@ ExecuteAction (
   // Executet the exit action.\r
   //\r
   if ((Action & BROWSER_ACTION_EXIT) != 0) {\r
-    DiscardForm (gCurrentSelection->FormSet, gCurrentSelection->Form, gBrowserSettingScope);\r
+    DiscardForm (FormSet, Form, gBrowserSettingScope);\r
     if (gBrowserSettingScope == SystemLevel) {\r
       if (ExitHandlerFunction != NULL) {\r
         ExitHandlerFunction ();\r
@@ -5015,6 +5029,7 @@ ExecuteAction (
   @retval BROWSER_NO_CHANGES       No browser data is changed.\r
   @retval BROWSER_SAVE_CHANGES     The changed browser data is saved.\r
   @retval BROWSER_DISCARD_CHANGES  The changed browser data is discard.\r
+  @retval BROWSER_KEEP_CURRENT     Browser keep current changes.\r
 \r
 **/\r
 UINT32\r
@@ -5027,6 +5042,7 @@ SaveReminder (
   FORM_BROWSER_FORMSET    *FormSet;\r
   BOOLEAN                 IsDataChanged;\r
   UINT32                  DataSavedAction;\r
+  UINT32                  ConfirmRet;\r
 \r
   DataSavedAction  = BROWSER_NO_CHANGES;\r
   IsDataChanged    = FALSE;\r
@@ -5054,13 +5070,18 @@ SaveReminder (
   // If data is changed, prompt user to save or discard it. \r
   //\r
   do {\r
-    DataSavedAction = (UINT32) mFormDisplay->ConfirmDataChange();\r
+    ConfirmRet = (UINT32) mFormDisplay->ConfirmDataChange();\r
 \r
-    if (DataSavedAction == BROWSER_SAVE_CHANGES) {\r
+    if (ConfirmRet == BROWSER_ACTION_SUBMIT) {\r
       SubmitForm (NULL, NULL, SystemLevel);\r
+      DataSavedAction = BROWSER_SAVE_CHANGES;\r
       break;\r
-    } else if (DataSavedAction == BROWSER_DISCARD_CHANGES) {\r
+    } else if (ConfirmRet == BROWSER_ACTION_DISCARD) {\r
       DiscardForm (NULL, NULL, SystemLevel);\r
+      DataSavedAction = BROWSER_DISCARD_CHANGES;\r
+      break;\r
+    } else if (ConfirmRet == BROWSER_ACTION_NONE) {\r
+      DataSavedAction = BROWSER_KEEP_CURRENT;\r
       break;\r
     }\r
   } while (1);\r