Update PCD driver to correctly set the HII type PCDs.
authorlgao4 <lgao4@de2fecce-e211-0410-80a6-f3fac2684e05>
Mon, 17 Aug 2009 02:05:32 +0000 (02:05 +0000)
committerlgao4 <lgao4@de2fecce-e211-0410-80a6-f3fac2684e05>
Mon, 17 Aug 2009 02:05:32 +0000 (02:05 +0000)
git-svn-id: https://edk2.tianocore.org/svn/edk2/trunk@9078 de2fecce-e211-0410-80a6-f3fac2684e05

edk2/MdeModulePkg/Universal/PCD/Dxe/Service.c

index 8ec3452..532bb39 100644 (file)
@@ -975,8 +975,10 @@ SetHiiVariable (
   VOID        *Buffer;\r
   EFI_STATUS  Status;\r
   UINT32      Attribute;\r
+  UINTN       SetSize;\r
 \r
   Size = 0;\r
+  SetSize = 0;\r
 \r
   //\r
   // Try to get original variable size information.\r
@@ -988,14 +990,17 @@ SetHiiVariable (
     &Size,\r
     NULL\r
     );\r
-\r
+  \r
   if (Status == EFI_BUFFER_TOO_SMALL) {\r
     //\r
     // Patch new PCD's value to offset in given HII variable.\r
     //\r
-    \r
-    Buffer = AllocatePool (Size);\r
-\r
+    if  (Size >= (DataSize + Offset)) {\r
+      SetSize = Size;\r
+    } else {\r
+      SetSize = DataSize + Offset;\r
+    }\r
+    Buffer = AllocatePool (SetSize);\r
     ASSERT (Buffer != NULL);\r
 \r
     Status = gRT->GetVariable (\r
@@ -1014,13 +1019,12 @@ SetHiiVariable (
               VariableName,\r
               VariableGuid,\r
               Attribute,\r
-              Size,\r
+              SetSize,\r
               Buffer\r
               );\r
 \r
     FreePool (Buffer);\r
     return Status;\r
-\r
   } else if (Status == EFI_NOT_FOUND) {\r
     //\r
     // If variable does not exist, a new variable need to be created.\r