Revision: 14894
          http://sourceforge.net/p/edk2/code/14894
Author:   ydong10
Date:     2013-11-25 02:38:03 +0000 (Mon, 25 Nov 2013)
Log Message:
-----------
Refine data copy and data compare logic.

Signed-off-by: Eric Dong <[email protected]>
Reviewed-by: Liming Gao <[email protected]>

Modified Paths:
--------------
    trunk/edk2/MdeModulePkg/Universal/DisplayEngineDxe/ProcessOptions.c
    trunk/edk2/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c

Modified: trunk/edk2/MdeModulePkg/Universal/DisplayEngineDxe/ProcessOptions.c
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/DisplayEngineDxe/ProcessOptions.c 
2013-11-22 21:37:34 UTC (rev 14893)
+++ trunk/edk2/MdeModulePkg/Universal/DisplayEngineDxe/ProcessOptions.c 
2013-11-25 02:38:03 UTC (rev 14894)
@@ -55,6 +55,56 @@
 }
 
 /**
+  Get UINT64 type value.
+
+  @param  Value                  Input Hii value.
+
+  @retval UINT64                 Return the UINT64 type value.
+
+**/
+UINT64
+HiiValueToUINT64 (
+  IN EFI_HII_VALUE      *Value
+  )
+{
+  UINT64  RetVal;
+
+  RetVal = 0;
+
+  switch (Value->Type) {
+  case EFI_IFR_TYPE_NUM_SIZE_8:
+    RetVal = Value->Value.u8;
+    break;
+
+  case EFI_IFR_TYPE_NUM_SIZE_16:
+    RetVal = Value->Value.u16;
+    break;
+
+  case EFI_IFR_TYPE_NUM_SIZE_32:
+    RetVal = Value->Value.u32;
+    break;
+
+  case EFI_IFR_TYPE_BOOLEAN:
+    RetVal = Value->Value.b;
+    break;
+
+  case EFI_IFR_TYPE_DATE:
+    RetVal = *(UINT64*) &Value->Value.date;
+    break;
+
+  case EFI_IFR_TYPE_TIME:
+    RetVal = (*(UINT64*) &Value->Value.time) & 0xffffff;
+    break;
+
+  default:
+    RetVal = Value->Value.u64;
+    break;
+  }
+
+  return RetVal;
+}
+
+/**
   Compare two Hii value.
 
   @param  Value1                 Expression value to compare on left-hand.
@@ -153,7 +203,7 @@
   //
   // Take remain types(integer, boolean, date/time) as integer
   //
-  Temp64 = (INT64) (Value1->Value.u64 - Value2->Value.u64);
+  Temp64 = HiiValueToUINT64(Value1) - HiiValueToUINT64(Value2);
   if (Temp64 > 0) {
     *Result = 1;
   } else if (Temp64 < 0) {
@@ -1178,8 +1228,24 @@
           Link = GetFirstNode (&Question->OptionListHead);
           Option = DISPLAY_QUESTION_OPTION_FROM_LINK (Link);
 
-          CopyMem (&gUserInput->InputValue.Value, 
&Option->OptionOpCode->Value, sizeof (EFI_IFR_TYPE_VALUE));
           gUserInput->InputValue.Type = Option->OptionOpCode->Type;
+          switch (gUserInput->InputValue.Type) {
+          case EFI_IFR_TYPE_NUM_SIZE_8:
+            gUserInput->InputValue.Value.u8 = Option->OptionOpCode->Value.u8;
+            break;
+          case EFI_IFR_TYPE_NUM_SIZE_16:
+            CopyMem (&gUserInput->InputValue.Value.u16, 
&Option->OptionOpCode->Value.u16, sizeof (UINT16));
+            break;
+          case EFI_IFR_TYPE_NUM_SIZE_32:
+            CopyMem (&gUserInput->InputValue.Value.u32, 
&Option->OptionOpCode->Value.u32, sizeof (UINT32));
+            break;
+          case EFI_IFR_TYPE_NUM_SIZE_64:
+            CopyMem (&gUserInput->InputValue.Value.u64, 
&Option->OptionOpCode->Value.u64, sizeof (UINT64));
+            break;
+          default:
+            ASSERT (FALSE);
+            break;
+          }
           gUserInput->SelectedStatement = Question;
 
           FreePool (*OptionString);

Modified: trunk/edk2/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c      
2013-11-22 21:37:34 UTC (rev 14893)
+++ trunk/edk2/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c      
2013-11-25 02:38:03 UTC (rev 14894)
@@ -1799,7 +1799,56 @@
   Value->Value.u64 = Temp;
 }
 
+/**
+  Get UINT64 type value.
 
+  @param  Value                  Input Hii value.
+
+  @retval UINT64                 Return the UINT64 type value.
+
+**/
+UINT64
+HiiValueToUINT64 (
+  IN EFI_HII_VALUE      *Value
+  )
+{
+  UINT64  RetVal;
+
+  RetVal = 0;
+
+  switch (Value->Type) {
+  case EFI_IFR_TYPE_NUM_SIZE_8:
+    RetVal = Value->Value.u8;
+    break;
+
+  case EFI_IFR_TYPE_NUM_SIZE_16:
+    RetVal = Value->Value.u16;
+    break;
+
+  case EFI_IFR_TYPE_NUM_SIZE_32:
+    RetVal = Value->Value.u32;
+    break;
+
+  case EFI_IFR_TYPE_BOOLEAN:
+    RetVal = Value->Value.b;
+    break;
+
+  case EFI_IFR_TYPE_DATE:
+    RetVal = *(UINT64*) &Value->Value.date;
+    break;
+
+  case EFI_IFR_TYPE_TIME:
+    RetVal = (*(UINT64*) &Value->Value.time) & 0xffffff;
+    break;
+
+  default:
+    RetVal = Value->Value.u64;
+    break;
+  }
+
+  return RetVal;
+}
+
 /**
   Compare two Hii value.
 
@@ -1899,7 +1948,7 @@
   //
   // Take remain types(integer, boolean, date/time) as integer
   //
-  Temp64 = (INT64) (Value1->Value.u64 - Value2->Value.u64);
+  Temp64 = HiiValueToUINT64(Value1) - HiiValueToUINT64(Value2);
   if (Temp64 > 0) {
     *Result = 1;
   } else if (Temp64 < 0) {

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Shape the Mobile Experience: Free Subscription
Software experts and developers: Be at the forefront of tech innovation.
Intel(R) Software Adrenaline delivers strategic insight and game-changing 
conversations that shape the rapidly evolving mobile landscape. Sign up now. 
http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to