]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/SetupBrowserDxe/Expression.c
Refine the check expression result logic.
[mirror_edk2.git] / MdeModulePkg / Universal / SetupBrowserDxe / Expression.c
index d4ab369a4c6c55ec376c69f4d9c59260490e34f4..92a4727b46d49dc1b832db95dd826455dd4be539 100644 (file)
@@ -3280,6 +3280,44 @@ Done:
   return Status;\r
 }\r
 \r
+/**\r
+  Check whether the result is TRUE or FALSE.\r
+  \r
+  For the EFI_HII_VALUE value type is numeric, return TRUE if the\r
+  value is not 0.\r
+\r
+  @param  Result             Input the result data.\r
+\r
+  @retval TRUE               The result is TRUE.\r
+  @retval FALSE              The result is FALSE.\r
+\r
+**/\r
+BOOLEAN\r
+IsTrue (\r
+  IN EFI_HII_VALUE     *Result\r
+  )\r
+{\r
+  switch (Result->Type) {\r
+  case EFI_IFR_TYPE_BOOLEAN:\r
+    return Result->Value.b;\r
+\r
+  case EFI_IFR_TYPE_NUM_SIZE_8:\r
+    return Result->Value.u8 != 0;\r
+\r
+  case EFI_IFR_TYPE_NUM_SIZE_16:\r
+    return Result->Value.u16 != 0;\r
+\r
+  case EFI_IFR_TYPE_NUM_SIZE_32:\r
+    return Result->Value.u32 != 0;\r
+\r
+  case EFI_IFR_TYPE_NUM_SIZE_64:\r
+    return Result->Value.u64 != 0;\r
+\r
+  default:\r
+    return FALSE;\r
+  }\r
+}\r
+\r
 /**\r
   Return the result of the expression list. Check the expression list and \r
   return the highest priority express result.  \r
@@ -3331,8 +3369,7 @@ EvaluateExpressionList (
   //\r
   ReturnVal = ExpressFalse;\r
   for (Index = 0; Index < ExpList->Count; Index++) {\r
-    if (ExpList->Expression[Index]->Result.Type == EFI_IFR_TYPE_BOOLEAN &&\r
-        ExpList->Expression[Index]->Result.Value.b) {\r
+    if (IsTrue (&ExpList->Expression[Index]->Result)) {\r
       switch (ExpList->Expression[Index]->Type) {\r
         case EFI_HII_EXPRESSION_SUPPRESS_IF:\r
           CompareOne = ExpressSuppress;\r