X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=EdkModulePkg%2FUniversal%2FPCD%2FPei%2FService.c;fp=EdkModulePkg%2FUniversal%2FPCD%2FPei%2FService.c;h=0574ae40428a108c39a0f3aeb9c3efa6e3f89839;hp=2de061bdb061f1cf1bc0be11560e17dce50ec88d;hb=c0e96fed1402f44ff4542346865db2a27b979c24;hpb=7db4ab705a654e2202b083968e92d5b552007d6b diff --git a/EdkModulePkg/Universal/PCD/Pei/Service.c b/EdkModulePkg/Universal/PCD/Pei/Service.c index 2de061bdb0..0574ae4042 100644 --- a/EdkModulePkg/Universal/PCD/Pei/Service.c +++ b/EdkModulePkg/Universal/PCD/Pei/Service.c @@ -148,7 +148,6 @@ GetHiiVariable ( ASSERT_EFI_ERROR (Status); Size = 0; - Status = VariablePpi->PeiGetVariable ( GetPeiServicesTablePointer (), VariableName, @@ -157,25 +156,30 @@ GetHiiVariable ( &Size, NULL ); - ASSERT (Status == EFI_BUFFER_TOO_SMALL); + if (Status == EFI_BUFFER_TOO_SMALL) { - Status = PeiServicesAllocatePool (Size, &Buffer); - ASSERT_EFI_ERROR (Status); - Status = VariablePpi->PeiGetVariable ( - GetPeiServicesTablePointer (), - (UINT16 *) VariableName, - (EFI_GUID *) VariableGuid, - NULL, - &Size, - Buffer - ); - ASSERT_EFI_ERROR (Status); + Status = PeiServicesAllocatePool (Size, &Buffer); + ASSERT_EFI_ERROR (Status); - *VariableSize = Size; - *VariableData = Buffer; + Status = VariablePpi->PeiGetVariable ( + GetPeiServicesTablePointer (), + (UINT16 *) VariableName, + (EFI_GUID *) VariableGuid, + NULL, + &Size, + Buffer + ); + ASSERT_EFI_ERROR (Status); + + *VariableSize = Size; + *VariableData = Buffer; + + return EFI_SUCCESS; + } else { + return EFI_NOT_FOUND; + } - return EFI_SUCCESS; } @@ -454,10 +458,17 @@ GetWorker ( Name = &StringTable[VariableHead->StringIndex]; Status = GetHiiVariable (Guid, Name, &Data, &DataSize); - ASSERT_EFI_ERROR (Status); - ASSERT (DataSize >= (UINTN) (VariableHead->Offset + Size)); - return (VOID *) ((UINT8 *) Data + VariableHead->Offset); + if (Status == EFI_SUCCESS) { + ASSERT (DataSize >= (UINTN) (VariableHead->Offset + Size)); + return (VOID *) ((UINT8 *) Data + VariableHead->Offset); + } else { + // + // BugBug: Need to support default value. The current implementation + // will return a memory buffer with ALL ZERO. + // + return AllocateZeroPool (Size); + } } case PCD_TYPE_DATA: