From e6106e892d5fb4662b5dccf2891451b0e4bfe3e5 Mon Sep 17 00:00:00 2001 From: Eric Dong Date: Fri, 18 Apr 2014 06:40:13 +0000 Subject: [PATCH] Refine the check expression result logic. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Eric Dong Reviewed-by: Gao, Liming git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15476 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Universal/SetupBrowserDxe/Expression.c | 41 ++++++++++++++++++- .../Universal/SetupBrowserDxe/IfrParse.c | 11 +---- .../Universal/SetupBrowserDxe/Setup.c | 2 +- .../Universal/SetupBrowserDxe/Setup.h | 17 ++++++++ 4 files changed, 59 insertions(+), 12 deletions(-) diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c b/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c index d4ab369a4c..92a4727b46 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c @@ -3280,6 +3280,44 @@ Done: return Status; } +/** + Check whether the result is TRUE or FALSE. + + For the EFI_HII_VALUE value type is numeric, return TRUE if the + value is not 0. + + @param Result Input the result data. + + @retval TRUE The result is TRUE. + @retval FALSE The result is FALSE. + +**/ +BOOLEAN +IsTrue ( + IN EFI_HII_VALUE *Result + ) +{ + switch (Result->Type) { + case EFI_IFR_TYPE_BOOLEAN: + return Result->Value.b; + + case EFI_IFR_TYPE_NUM_SIZE_8: + return Result->Value.u8 != 0; + + case EFI_IFR_TYPE_NUM_SIZE_16: + return Result->Value.u16 != 0; + + case EFI_IFR_TYPE_NUM_SIZE_32: + return Result->Value.u32 != 0; + + case EFI_IFR_TYPE_NUM_SIZE_64: + return Result->Value.u64 != 0; + + default: + return FALSE; + } +} + /** Return the result of the expression list. Check the expression list and return the highest priority express result. @@ -3331,8 +3369,7 @@ EvaluateExpressionList ( // ReturnVal = ExpressFalse; for (Index = 0; Index < ExpList->Count; Index++) { - if (ExpList->Expression[Index]->Result.Type == EFI_IFR_TYPE_BOOLEAN && - ExpList->Expression[Index]->Result.Value.b) { + if (IsTrue (&ExpList->Expression[Index]->Result)) { switch (ExpList->Expression[Index]->Type) { case EFI_HII_EXPRESSION_SUPPRESS_IF: CompareOne = ExpressSuppress; diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c b/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c index 920c839956..e806b504b2 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c @@ -1559,11 +1559,7 @@ ParseOpCodes ( return Status; } - if (CurrentExpression->Result.Type != EFI_IFR_TYPE_BOOLEAN) { - return EFI_INVALID_PARAMETER; - } - - OpCodeDisabled = CurrentExpression->Result.Value.b; + OpCodeDisabled = IsTrue(&CurrentExpression->Result); } CurrentExpression = NULL; @@ -2512,11 +2508,8 @@ ParseOpCodes ( return Status; } - if (CurrentExpression->Result.Type != EFI_IFR_TYPE_BOOLEAN) { - return EFI_INVALID_PARAMETER; - } + OpCodeDisabled = IsTrue (&CurrentExpression->Result); - OpCodeDisabled = CurrentExpression->Result.Value.b; // // DisableIf Expression is only used once and not queued, free it // diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c index af52f57103..fb988d9ed6 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c @@ -1985,7 +1985,7 @@ ValidateQuestion ( return Status; } - if ((Expression->Result.Type == EFI_IFR_TYPE_BOOLEAN) && Expression->Result.Value.b) { + if (IsTrue (&Expression->Result)) { switch (Type) { case EFI_HII_EXPRESSION_INCONSISTENT_IF: BrowserStatus = BROWSER_INCONSISTENT_IF; diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h index cb3cc320bc..5dedda4e91 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h @@ -1711,4 +1711,21 @@ PopupErrorMessage ( IN CHAR16 *ErrorString ); +/** + Check whether the result is TRUE or FALSE. + + For the EFI_HII_VALUE value type is numeric, return TRUE if the + value is not 0. + + @param Result Input the result data. + + @retval TRUE The result is TRUE. + @retval FALSE The result is FALSE. + +**/ +BOOLEAN +IsTrue ( + IN EFI_HII_VALUE *Result + ); + #endif