From a7f87053e00ff8a24664b24f745702fa1ece2d80 Mon Sep 17 00:00:00 2001 From: ydong10 Date: Sun, 6 Jan 2013 06:12:50 +0000 Subject: Base on the type field to get the width of value field for option opcode. Signed-off-by: Eric Dong Reviewed-by: Liming Gao git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14036 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/Library/UefiHiiLib/HiiLib.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'MdeModulePkg/Library') diff --git a/MdeModulePkg/Library/UefiHiiLib/HiiLib.c b/MdeModulePkg/Library/UefiHiiLib/HiiLib.c index 02887bf76c..ba74d0f88f 100644 --- a/MdeModulePkg/Library/UefiHiiLib/HiiLib.c +++ b/MdeModulePkg/Library/UefiHiiLib/HiiLib.c @@ -946,6 +946,7 @@ InternalHiiValidateCurrentSetting ( UINT16 Offset; UINT16 Width; UINT64 VarValue; + UINT64 TmpValue; LIST_ENTRY *Link; UINT8 *VarBuffer; UINTN MaxBufferSize; @@ -1510,7 +1511,9 @@ InternalHiiValidateCurrentSetting ( // // Check current value is the value of one of option. // - if (VarValue == IfrOneOfOption->Value.u64) { + TmpValue = 0; + CopyMem (&TmpValue, &IfrOneOfOption->Value, IfrOneOfOption->Header.Length - OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value)); + if (VarValue == TmpValue) { // // The value is one of option value. // Set OpCode to Zero, don't need check again. @@ -2628,7 +2631,7 @@ HiiCreateOneOfOptionOpCode ( OpCode.Type = Type; CopyMem (&OpCode.Value, &Value, mHiiDefaultTypeToWidth[Type]); - return InternalHiiCreateOpCode (OpCodeHandle, &OpCode, EFI_IFR_ONE_OF_OPTION_OP, sizeof (OpCode)); + return InternalHiiCreateOpCode (OpCodeHandle, &OpCode, EFI_IFR_ONE_OF_OPTION_OP, OFFSET_OF(EFI_IFR_ONE_OF_OPTION, Value) + mHiiDefaultTypeToWidth[Type]); } /** -- cgit v1.2.3