Reviewed-by: Eric Dong <eric.d...@intel.com>
> -----Original Message----- > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Dandan > Bi > Sent: Monday, February 20, 2017 1:06 PM > To: edk2-devel@lists.01.org > Cc: Dong, Eric; Gao, Liming > Subject: [edk2] [patch] MdeModulePkg/BMMUiLib: Remove old useless data before > new save action > > There exits the case that when saving changes in form A, > the old saved data in form B are not cleaned, will be saved > again with the new save. Thus incorrect UI behavior will be > shown. This patch is to remove some useless data. > > https://bugzilla.tianocore.org/show_bug.cgi?id=385 > > Cc: Eric Dong <eric.d...@intel.com> > Cc: Liming Gao <liming....@intel.com> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Dandan Bi <dandan...@intel.com> > --- > .../BootMaintenanceManagerUiLib/BootMaintenance.c | 35 > +++++++++++++++++++++- > .../BootMaintenanceManager.h | 14 ++++++++- > 2 files changed, 47 insertions(+), 2 deletions(-) > > diff --git > a/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenance.c > b/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenance.c > index e49ab98..3ff23a5 100644 > --- a/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenance.c > +++ b/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenance.c > @@ -1,9 +1,9 @@ > /** @file > The functions for Boot Maintainence Main menu. > > -Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR> > +Copyright (c) 2004 - 2017, 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 > http://opensource.org/licenses/bsd-license.php > > @@ -1212,13 +1212,15 @@ BootMaintCallback ( > if ((Value == NULL) || (ActionRequest == NULL)) { > return EFI_INVALID_PARAMETER; > } > > if (QuestionId == KEY_VALUE_SAVE_AND_EXIT_BOOT) { > + CleanUselessBeforeSubmit (Private); > CurrentFakeNVMap->BootOptionChanged = FALSE; > *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT; > } else if (QuestionId == KEY_VALUE_SAVE_AND_EXIT_DRIVER) { > + CleanUselessBeforeSubmit (Private); > CurrentFakeNVMap->DriverOptionChanged = FALSE; > *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT; > } else if (QuestionId == KEY_VALUE_NO_SAVE_AND_EXIT_DRIVER) { > // > // Discard changes and exit formset > @@ -1267,10 +1269,11 @@ BootMaintCallback ( > } else { > switch (QuestionId) { > case KEY_VALUE_SAVE_AND_EXIT: > case KEY_VALUE_NO_SAVE_AND_EXIT: > if (QuestionId == KEY_VALUE_SAVE_AND_EXIT) { > + CleanUselessBeforeSubmit (Private); > *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT; > } else if (QuestionId == KEY_VALUE_NO_SAVE_AND_EXIT) { > DiscardChangeHandler (Private, CurrentFakeNVMap); > *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT; > } > @@ -1369,10 +1372,40 @@ DiscardChangeHandler ( > break; > } > } > > /** > + This function is to clean some useless data before submit changes. > + > + @param Private The BMM context data. > + > +**/ > +VOID > +CleanUselessBeforeSubmit ( > + IN BMM_CALLBACK_DATA *Private > + ) > +{ > + UINT16 Index; > + if (Private->BmmPreviousPageId != FORM_BOOT_DEL_ID) { > + for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) { > + if (Private->BmmFakeNvData.BootOptionDel[Index] && > !Private->BmmFakeNvData.BootOptionDelMark[Index]) { > + Private->BmmFakeNvData.BootOptionDel[Index] = FALSE; > + Private->BmmOldFakeNVData.BootOptionDel[Index] = FALSE; > + } > + } > + } > + if (Private->BmmPreviousPageId != FORM_DRV_DEL_ID) { > + for (Index = 0; Index < DriverOptionMenu.MenuNumber; Index++) { > + if (Private->BmmFakeNvData.DriverOptionDel[Index] && > !Private->BmmFakeNvData.DriverOptionDelMark[Index]) { > + Private->BmmFakeNvData.DriverOptionDel[Index] = FALSE; > + Private->BmmOldFakeNVData.DriverOptionDel[Index] = FALSE; > + } > + } > + } > +} > + > +/** > > Update the menus in the BMM page. > > **/ > VOID > diff --git > a/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManager.h > b/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManager.h > index 0665c78..532b75b 100644 > --- > a/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManager.h > +++ > b/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManager.h > @@ -1,9 +1,9 @@ > /** @file > Header file for boot maintenance module. > > -Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR> > +Copyright (c) 2004 - 2017, 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 > http://opensource.org/licenses/bsd-license.php > > @@ -1047,10 +1047,22 @@ VOID > DiscardChangeHandler ( > IN BMM_CALLBACK_DATA *Private, > IN BMM_FAKE_NV_DATA *CurrentFakeNVMap > ); > > + > +/** > + This function is to clean some useless data before submit changes. > + > + @param Private The BMM context data. > + > +**/ > +VOID > +CleanUselessBeforeSubmit ( > + IN BMM_CALLBACK_DATA *Private > + ); > + > /** > Dispatch the display to the next page based on NewPageId. > > @param Private The BMM context data. > @param NewPageId The original page ID. > -- > 1.9.5.msysgit.1 > > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel