From b13151ffb676e5bcea680ef7cf6443b927af86d1 Mon Sep 17 00:00:00 2001 From: lgao4 Date: Mon, 17 Aug 2009 02:05:32 +0000 Subject: [PATCH] Update PCD driver to correctly set the HII type PCDs. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9078 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/Universal/PCD/Dxe/Service.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/MdeModulePkg/Universal/PCD/Dxe/Service.c b/MdeModulePkg/Universal/PCD/Dxe/Service.c index 8ec3452386..532bb39cc4 100644 --- a/MdeModulePkg/Universal/PCD/Dxe/Service.c +++ b/MdeModulePkg/Universal/PCD/Dxe/Service.c @@ -975,8 +975,10 @@ SetHiiVariable ( VOID *Buffer; EFI_STATUS Status; UINT32 Attribute; + UINTN SetSize; Size = 0; + SetSize = 0; // // Try to get original variable size information. @@ -988,14 +990,17 @@ SetHiiVariable ( &Size, NULL ); - + if (Status == EFI_BUFFER_TOO_SMALL) { // // Patch new PCD's value to offset in given HII variable. // - - Buffer = AllocatePool (Size); - + if (Size >= (DataSize + Offset)) { + SetSize = Size; + } else { + SetSize = DataSize + Offset; + } + Buffer = AllocatePool (SetSize); ASSERT (Buffer != NULL); Status = gRT->GetVariable ( @@ -1014,13 +1019,12 @@ SetHiiVariable ( VariableName, VariableGuid, Attribute, - Size, + SetSize, Buffer ); FreePool (Buffer); return Status; - } else if (Status == EFI_NOT_FOUND) { // // If variable does not exist, a new variable need to be created.