summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Universal/SetupBrowserDxe
diff options
context:
space:
mode:
authorEric Dong <eric.dong@intel.com>2013-11-25 02:38:03 +0000
committerydong10 <ydong10@6f19259b-4bc3-4df7-8a09-765794883524>2013-11-25 02:38:03 +0000
commitd63a9eb477e67bbc6b344a99f2d14813b61d247a (patch)
tree9d9d621deb5cd3f8aeddf04e55fa5a69a3480c3f /MdeModulePkg/Universal/SetupBrowserDxe
parent74b0fb8c875ebdc0c5681ed125b5446a4a1cb07d (diff)
downloadedk2-d63a9eb477e67bbc6b344a99f2d14813b61d247a.zip
edk2-d63a9eb477e67bbc6b344a99f2d14813b61d247a.tar.gz
edk2-d63a9eb477e67bbc6b344a99f2d14813b61d247a.tar.bz2
Refine data copy and data compare logic.
Signed-off-by: Eric Dong <eric.dong@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14894 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Universal/SetupBrowserDxe')
-rw-r--r--MdeModulePkg/Universal/SetupBrowserDxe/Expression.c51
1 files changed, 50 insertions, 1 deletions
diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c b/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c
index e717196..d4ab369 100644
--- a/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c
+++ b/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c
@@ -1799,6 +1799,55 @@ ExtendValueToU64 (
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 @@ CompareHiiValue (
//
// 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) {