BOOLEAN GetFormSet;\r
BOOLEAN GetForm;\r
BOOLEAN Updated;\r
- EFI_IFR_OP_HEADER *AddOpCode;\r
- UINT32 UpdatePackageLength;\r
+ UINTN UpdatePackageLength;\r
\r
CopyMem (TempPackage, Package, sizeof (EFI_HII_PACKAGE_HEADER));\r
UpdatePackageLength = sizeof (EFI_HII_PACKAGE_HEADER);\r
//\r
// The matched Form is found, and Update data in this form\r
//\r
- if (GetFormSet && GetForm && !Updated) {\r
+ if (GetFormSet && GetForm) {\r
UpdateIfrOpHdr = (EFI_IFR_OP_HEADER *) OpCodeBufferStart->Buffer;\r
if ((UpdateIfrOpHdr->Length == IfrOpHdr->Length) && \\r
(CompareMem (IfrOpHdr, UpdateIfrOpHdr, UpdateIfrOpHdr->Length) == 0)) {\r
return EFI_NOT_FOUND;\r
}\r
}\r
+\r
//\r
// Insert the updated data\r
//\r
- UpdateIfrOpHdr = (EFI_IFR_OP_HEADER *) OpCodeBufferStart->Buffer;\r
- AddSize = UpdateIfrOpHdr->Length;\r
- AddOpCode = (EFI_IFR_OP_HEADER *) (OpCodeBufferStart->Buffer + AddSize);\r
- while (AddSize < OpCodeBufferStart->Position) {\r
- CopyMem (BufferPos, AddOpCode, AddOpCode->Length);\r
- BufferPos += AddOpCode->Length;\r
- UpdatePackageLength += AddOpCode->Length;\r
- \r
- AddSize += AddOpCode->Length;\r
- AddOpCode = (EFI_IFR_OP_HEADER *) (OpCodeBufferStart->Buffer + AddSize);\r
- }\r
-\r
- ASSERT (AddSize == OpCodeBufferStart->Position);\r
+ AddSize = ((EFI_IFR_OP_HEADER *) OpCodeBufferStart->Buffer)->Length;\r
+ CopyMem (BufferPos, OpCodeBufferStart->Buffer + AddSize, OpCodeBufferStart->Position - AddSize);\r
+ BufferPos += OpCodeBufferStart->Position - AddSize;\r
+ UpdatePackageLength += OpCodeBufferStart->Position - AddSize;\r
\r
if (OpCodeBufferEnd != NULL) {\r
//\r
BufferPos += IfrOpHdr->Length;\r
UpdatePackageLength += IfrOpHdr->Length;\r
}\r
+\r
+ //\r
+ // Copy the left package data.\r
+ //\r
+ Offset += IfrOpHdr->Length;\r
+ CopyMem (BufferPos, (UINT8 *) Package + Offset, PackageHeader.Length - Offset);\r
+ UpdatePackageLength += PackageHeader.Length - Offset;\r
+\r
//\r
// Set update flag\r
//\r
Updated = TRUE;\r
+ break;\r
}\r
}\r
\r
//\r
// Update the package length.\r
//\r
- PackageHeader.Length = UpdatePackageLength;\r
+ PackageHeader.Length = (UINT32) UpdatePackageLength;\r
CopyMem (TempPackage, &PackageHeader, sizeof (EFI_HII_PACKAGE_HEADER));\r
\r
return EFI_SUCCESS;\r
#define LABEL_UPDATE_BBS 0x2222\r
\r
formset\r
- guid = FORMSET_GUID,\r
- title = STRING_TOKEN(STR_FORM_SET_TITLE),\r
- help = STRING_TOKEN(STR_FORM_SET_TITLE_HELP),\r
- class = EFI_ON_BOARD_DEVICE_CLASS,\r
- subclass = EFI_SETUP_APPLICATION_SUBCLASS,\r
+ guid = FORMSET_GUID,\r
+ title = STRING_TOKEN(STR_FORM_SET_TITLE),\r
+ help = STRING_TOKEN(STR_FORM_SET_TITLE_HELP),\r
+ classguid = EFI_HII_PLATFORM_SETUP_FORMSET_GUID,\r
\r
//\r
// Notes: VfrCompiler will insert a Standard Default Storage declaration \r