summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Universal/PCD/Dxe/Service.c
diff options
context:
space:
mode:
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2009-08-17 02:05:32 +0000
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2009-08-17 02:05:32 +0000
commitb13151ffb676e5bcea680ef7cf6443b927af86d1 (patch)
treec33a11591992323aa985792b0cbc80b622065dd8 /MdeModulePkg/Universal/PCD/Dxe/Service.c
parente0d22735b73ca554651d81fda0f0cc4a338ba72f (diff)
downloadedk2-platforms-b13151ffb676e5bcea680ef7cf6443b927af86d1.tar.xz
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
Diffstat (limited to 'MdeModulePkg/Universal/PCD/Dxe/Service.c')
-rw-r--r--MdeModulePkg/Universal/PCD/Dxe/Service.c16
1 files 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.