Keep consistent about the return value between the caller and callee.
authorEric Dong <eric.dong@intel.com>
Tue, 31 Dec 2013 04:46:53 +0000 (04:46 +0000)
committerydong10 <ydong10@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 31 Dec 2013 04:46:53 +0000 (04:46 +0000)
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15032 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Include/Protocol/FormBrowserEx.h
MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
MdeModulePkg/Universal/SetupBrowserDxe/Setup.h

index afeb7c0c0fd6a2e94a307efad7de8e621ab6bda1..3bb64c6ff9b2fa90304837c96b74d019a72f6f2c 100644 (file)
@@ -27,6 +27,7 @@ typedef struct _EFI_FORM_BROWSER_EXTENSION_PROTOCOL   EFI_FORM_BROWSER_EXTENSION
 #define BROWSER_NO_CHANGES          0\r
 #define BROWSER_SAVE_CHANGES        1\r
 #define BROWSER_DISCARD_CHANGES     2\r
+#define BROWSER_KEEP_CURRENT        3\r
 \r
 //\r
 // Browser actions. They can be cominbed together. \r
@@ -126,6 +127,7 @@ VOID
   @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
 typedef\r
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
index 337abb3fb6539207a8ff4a85e9d4b587e652a7e0..87305bad689dc8fdf19cfcb3c4b6f26c7605d787 100644 (file)
@@ -1327,6 +1327,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