StrCpy (Destination + Length, Source);\r
}\r
\r
+/**\r
+ Get UINT64 type value.\r
+\r
+ @param Value Input Hii value.\r
+\r
+ @retval UINT64 Return the UINT64 type value.\r
+\r
+**/\r
+UINT64\r
+HiiValueToUINT64 (\r
+ IN EFI_HII_VALUE *Value\r
+ )\r
+{\r
+ UINT64 RetVal;\r
+\r
+ RetVal = 0;\r
+\r
+ switch (Value->Type) {\r
+ case EFI_IFR_TYPE_NUM_SIZE_8:\r
+ RetVal = Value->Value.u8;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_NUM_SIZE_16:\r
+ RetVal = Value->Value.u16;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_NUM_SIZE_32:\r
+ RetVal = Value->Value.u32;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_BOOLEAN:\r
+ RetVal = Value->Value.b;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_DATE:\r
+ RetVal = *(UINT64*) &Value->Value.date;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_TIME:\r
+ RetVal = (*(UINT64*) &Value->Value.time) & 0xffffff;\r
+ break;\r
+\r
+ default:\r
+ RetVal = Value->Value.u64;\r
+ break;\r
+ }\r
+\r
+ return RetVal;\r
+}\r
+\r
/**\r
Compare two Hii value.\r
\r
//\r
// Take remain types(integer, boolean, date/time) as integer\r
//\r
- Temp64 = (INT64) (Value1->Value.u64 - Value2->Value.u64);\r
+ Temp64 = HiiValueToUINT64(Value1) - HiiValueToUINT64(Value2);\r
if (Temp64 > 0) {\r
*Result = 1;\r
} else if (Temp64 < 0) {\r
Link = GetFirstNode (&Question->OptionListHead);\r
Option = DISPLAY_QUESTION_OPTION_FROM_LINK (Link);\r
\r
- CopyMem (&gUserInput->InputValue.Value, &Option->OptionOpCode->Value, sizeof (EFI_IFR_TYPE_VALUE));\r
gUserInput->InputValue.Type = Option->OptionOpCode->Type;\r
+ switch (gUserInput->InputValue.Type) {\r
+ case EFI_IFR_TYPE_NUM_SIZE_8:\r
+ gUserInput->InputValue.Value.u8 = Option->OptionOpCode->Value.u8;\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_16:\r
+ CopyMem (&gUserInput->InputValue.Value.u16, &Option->OptionOpCode->Value.u16, sizeof (UINT16));\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_32:\r
+ CopyMem (&gUserInput->InputValue.Value.u32, &Option->OptionOpCode->Value.u32, sizeof (UINT32));\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_64:\r
+ CopyMem (&gUserInput->InputValue.Value.u64, &Option->OptionOpCode->Value.u64, sizeof (UINT64));\r
+ break;\r
+ default:\r
+ ASSERT (FALSE);\r
+ break;\r
+ }\r
gUserInput->SelectedStatement = Question;\r
\r
FreePool (*OptionString);\r
Value->Value.u64 = Temp;\r
}\r
\r
+/**\r
+ Get UINT64 type value.\r
+\r
+ @param Value Input Hii value.\r
+\r
+ @retval UINT64 Return the UINT64 type value.\r
+\r
+**/\r
+UINT64\r
+HiiValueToUINT64 (\r
+ IN EFI_HII_VALUE *Value\r
+ )\r
+{\r
+ UINT64 RetVal;\r
+\r
+ RetVal = 0;\r
+\r
+ switch (Value->Type) {\r
+ case EFI_IFR_TYPE_NUM_SIZE_8:\r
+ RetVal = Value->Value.u8;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_NUM_SIZE_16:\r
+ RetVal = Value->Value.u16;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_NUM_SIZE_32:\r
+ RetVal = Value->Value.u32;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_BOOLEAN:\r
+ RetVal = Value->Value.b;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_DATE:\r
+ RetVal = *(UINT64*) &Value->Value.date;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_TIME:\r
+ RetVal = (*(UINT64*) &Value->Value.time) & 0xffffff;\r
+ break;\r
+\r
+ default:\r
+ RetVal = Value->Value.u64;\r
+ break;\r
+ }\r
+\r
+ return RetVal;\r
+}\r
\r
/**\r
Compare two Hii value.\r
//\r
// Take remain types(integer, boolean, date/time) as integer\r
//\r
- Temp64 = (INT64) (Value1->Value.u64 - Value2->Value.u64);\r
+ Temp64 = HiiValueToUINT64(Value1) - HiiValueToUINT64(Value2);\r
if (Temp64 > 0) {\r
*Result = 1;\r
} else if (Temp64 < 0) {\r