Refine the check expression result logic.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Gao, Liming <liming,gao@intel.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15476 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Eric Dong 2014-04-18 06:40:13 +00:00 committed by ydong10
parent 7e2f32894b
commit e6106e892d
4 changed files with 59 additions and 12 deletions

View File

@ -3280,6 +3280,44 @@ Done:
return Status; 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 result of the expression list. Check the expression list and
return the highest priority express result. return the highest priority express result.
@ -3331,8 +3369,7 @@ EvaluateExpressionList (
// //
ReturnVal = ExpressFalse; ReturnVal = ExpressFalse;
for (Index = 0; Index < ExpList->Count; Index++) { for (Index = 0; Index < ExpList->Count; Index++) {
if (ExpList->Expression[Index]->Result.Type == EFI_IFR_TYPE_BOOLEAN && if (IsTrue (&ExpList->Expression[Index]->Result)) {
ExpList->Expression[Index]->Result.Value.b) {
switch (ExpList->Expression[Index]->Type) { switch (ExpList->Expression[Index]->Type) {
case EFI_HII_EXPRESSION_SUPPRESS_IF: case EFI_HII_EXPRESSION_SUPPRESS_IF:
CompareOne = ExpressSuppress; CompareOne = ExpressSuppress;

View File

@ -1559,11 +1559,7 @@ ParseOpCodes (
return Status; return Status;
} }
if (CurrentExpression->Result.Type != EFI_IFR_TYPE_BOOLEAN) { OpCodeDisabled = IsTrue(&CurrentExpression->Result);
return EFI_INVALID_PARAMETER;
}
OpCodeDisabled = CurrentExpression->Result.Value.b;
} }
CurrentExpression = NULL; CurrentExpression = NULL;
@ -2512,11 +2508,8 @@ ParseOpCodes (
return Status; return Status;
} }
if (CurrentExpression->Result.Type != EFI_IFR_TYPE_BOOLEAN) { OpCodeDisabled = IsTrue (&CurrentExpression->Result);
return EFI_INVALID_PARAMETER;
}
OpCodeDisabled = CurrentExpression->Result.Value.b;
// //
// DisableIf Expression is only used once and not queued, free it // DisableIf Expression is only used once and not queued, free it
// //

View File

@ -1985,7 +1985,7 @@ ValidateQuestion (
return Status; return Status;
} }
if ((Expression->Result.Type == EFI_IFR_TYPE_BOOLEAN) && Expression->Result.Value.b) { if (IsTrue (&Expression->Result)) {
switch (Type) { switch (Type) {
case EFI_HII_EXPRESSION_INCONSISTENT_IF: case EFI_HII_EXPRESSION_INCONSISTENT_IF:
BrowserStatus = BROWSER_INCONSISTENT_IF; BrowserStatus = BROWSER_INCONSISTENT_IF;

View File

@ -1711,4 +1711,21 @@ PopupErrorMessage (
IN CHAR16 *ErrorString 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 #endif