UINT8 *StringBuf;\r
UINTN StringSize;\r
UINTN TotalStringSize;\r
+ UINTN CapsulesToProcess;\r
\r
CapsuleOnDiskBuf = NULL;\r
BlockDescriptors = NULL;\r
TotalStringSize += StrSize (CapsuleOnDiskBuf[Index].FileInfo->FileName);\r
}\r
\r
+ // If Persist Across Reset isn't supported, skip the file name strings capsule\r
+ if (!FeaturePcdGet (PcdSupportUpdateCapsuleReset)) {\r
+ CapsulesToProcess = CapsuleOnDiskNum;\r
+ goto BuildGather;\r
+ }\r
+ CapsulesToProcess = CapsuleOnDiskNum + 1;\r
+\r
FileNameCapsule = AllocateZeroPool (sizeof (EFI_CAPSULE_HEADER) + TotalStringSize);\r
if (FileNameCapsule == NULL) {\r
DEBUG ((DEBUG_ERROR, "Fail to allocate memory for name capsule.\n"));\r
//\r
// 3. Build Gather list for the capsules\r
//\r
- Status = BuildGatherList (CapsuleBuffer, CapsuleSize, CapsuleOnDiskNum + 1, &BlockDescriptors);\r
+BuildGather:\r
+ Status = BuildGatherList (CapsuleBuffer, CapsuleSize, CapsulesToProcess, &BlockDescriptors);\r
if (EFI_ERROR (Status) || BlockDescriptors == NULL) {\r
FreePool (CapsuleBuffer);\r
FreePool (CapsuleSize);\r
- FreePool (FileNameCapsule);\r
+ if (FileNameCapsule != NULL) {\r
+ FreePool (FileNameCapsule);\r
+ }\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
//\r
// 4. Call UpdateCapsule() service\r
//\r
- Status = gRT->UpdateCapsule((EFI_CAPSULE_HEADER **) CapsuleBuffer, CapsuleOnDiskNum + 1, (UINTN) BlockDescriptors);\r
+ Status = gRT->UpdateCapsule ((EFI_CAPSULE_HEADER **) CapsuleBuffer,\r
+ CapsulesToProcess,\r
+ (UINTN) BlockDescriptors);\r
\r
return Status;\r
}\r