diff options
author | Eric Dong <eric.dong@intel.com> | 2014-04-18 06:40:13 +0000 |
---|---|---|
committer | ydong10 <ydong10@6f19259b-4bc3-4df7-8a09-765794883524> | 2014-04-18 06:40:13 +0000 |
commit | e6106e892d5fb4662b5dccf2891451b0e4bfe3e5 (patch) | |
tree | 48f55b78898d0bcfb011575e311ae1249dde1391 /MdeModulePkg | |
parent | 7e2f32894bb31ba19c89e3561f97068761f5b5c0 (diff) | |
download | edk2-platforms-e6106e892d5fb4662b5dccf2891451b0e4bfe3e5.tar.xz |
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
Diffstat (limited to 'MdeModulePkg')
-rw-r--r-- | MdeModulePkg/Universal/SetupBrowserDxe/Expression.c | 41 | ||||
-rw-r--r-- | MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c | 11 | ||||
-rw-r--r-- | MdeModulePkg/Universal/SetupBrowserDxe/Setup.c | 2 | ||||
-rw-r--r-- | MdeModulePkg/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 @@ -3281,6 +3281,44 @@ Done: }
/**
+ 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.
Priority: DisableIf > SuppressIf > GrayOutIf > FALSE
@@ -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
|