mirror of https://github.com/acidanthera/audk.git
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:
parent
7e2f32894b
commit
e6106e892d
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
//
|
//
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue