UINTN PackageOffset;\r
EFI_IFR_VARSTORE *IfrVarStore;\r
EFI_IFR_VARSTORE_EFI *IfrEfiVarStore;\r
+ EFI_IFR_VARSTORE_EFI *IfrEfiVarStoreTmp;\r
EFI_IFR_OP_HEADER *IfrOpHdr;\r
EFI_IFR_ONE_OF *IfrOneOf;\r
EFI_IFR_REF4 *IfrRef;\r
IFR_BLOCK_DATA *BlockData;\r
CHAR16 *VarStoreName;\r
UINTN NameSize;\r
+ UINTN NvDefaultStoreSize;\r
UINT16 VarWidth;\r
UINT16 VarDefaultId;\r
BOOLEAN FirstOneOfOption;\r
SmallestDefaultId = 0xFFFF;\r
FromOtherDefaultOpcode = FALSE;\r
QuestionReferBitField = FALSE;\r
+ IfrEfiVarStoreTmp = NULL;\r
\r
//\r
// Go through the form package to parse OpCode one by one.\r
}\r
\r
AsciiStrToUnicodeStrS ((CHAR8 *)IfrEfiVarStore->Name, VarStoreName, NameSize);\r
+ if (IfrEfiVarStoreTmp != NULL) {\r
+ FreePool (IfrEfiVarStoreTmp);\r
+ }\r
+\r
+ IfrEfiVarStoreTmp = AllocatePool (IfrEfiVarStore->Header.Length + AsciiStrSize ((CHAR8 *)IfrEfiVarStore->Name));\r
+ if (IfrEfiVarStoreTmp == NULL) {\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ goto Done;\r
+ }\r
+\r
+ CopyMem (IfrEfiVarStoreTmp, IfrEfiVarStore, IfrEfiVarStore->Header.Length);\r
+ AsciiStrToUnicodeStrS ((CHAR8 *)IfrEfiVarStore->Name, (CHAR16 *)&(IfrEfiVarStoreTmp->Name[0]), AsciiStrSize ((CHAR8 *)IfrEfiVarStore->Name) * sizeof (CHAR16));\r
\r
if (IsThisVarstore (&IfrEfiVarStore->Guid, VarStoreName, ConfigHdr)) {\r
//\r
//\r
// Set default value base on the DefaultId list get from IFR data.\r
//\r
+ NvDefaultStoreSize = PcdGetSize (PcdNvStoreDefaultValueBuffer);\r
for (LinkData = DefaultIdArray->Entry.ForwardLink; LinkData != &DefaultIdArray->Entry; LinkData = LinkData->ForwardLink) {\r
DefaultDataPtr = BASE_CR (LinkData, IFR_DEFAULT_DATA, Entry);\r
DefaultData.DefaultId = DefaultDataPtr->DefaultId;\r
+ if (NvDefaultStoreSize > sizeof (PCD_NV_STORE_DEFAULT_BUFFER_HEADER)) {\r
+ FindQuestionDefaultSetting (DefaultData.DefaultId, IfrEfiVarStoreTmp, &(IfrOneOf->Question), &DefaultData.Value, VarWidth, QuestionReferBitField);\r
+ }\r
+\r
InsertDefaultValue (BlockData, &DefaultData);\r
}\r
}\r
}\r
}\r
\r
+ if (IfrEfiVarStoreTmp != NULL) {\r
+ FreePool (IfrEfiVarStoreTmp);\r
+ }\r
+\r
return Status;\r
}\r
\r