X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=EdkUnixPkg%2FLibrary%2FEdkGenericBdsLib%2FBdsMisc.c;h=6b4d1aa149a4a712ca8e3821a8f89c2732fd0ad9;hb=0e7bfce8d0dc29695d0eb141f16e7976abcc5486;hp=659bdc666d97babd15d0ebea59f6c3fc14c645b0;hpb=c9093a06e72ef16d2f3bd7ce0a2b9a172e9d048c;p=mirror_edk2.git diff --git a/EdkUnixPkg/Library/EdkGenericBdsLib/BdsMisc.c b/EdkUnixPkg/Library/EdkGenericBdsLib/BdsMisc.c index 659bdc666d..6b4d1aa149 100644 --- a/EdkUnixPkg/Library/EdkGenericBdsLib/BdsMisc.c +++ b/EdkUnixPkg/Library/EdkGenericBdsLib/BdsMisc.c @@ -976,3 +976,56 @@ Returns: } } } + +EFI_STATUS +BdsLibGetHiiHandles ( + IN EFI_HII_PROTOCOL *Hii, + IN OUT UINT16 *HandleBufferLength, + OUT EFI_HII_HANDLE **HiiHandleBuffer + ) +/*++ + +Routine Description: + + Determines the handles that are currently active in the database. + It's the caller's responsibility to free handle buffer. + +Arguments: + + This - A pointer to the EFI_HII_PROTOCOL instance. + HandleBufferLength - On input, a pointer to the length of the handle buffer. On output, + the length of the handle buffer that is required for the handles found. + HiiHandleBuffer - Pointer to an array of EFI_HII_PROTOCOL instances returned. + +Returns: + + EFI_SUCCESS - Get an array of EFI_HII_PROTOCOL instances successfully. + EFI_INVALID_PARAMETER - Hii is NULL. + EFI_NOT_FOUND - Database not found. + +--*/ +{ + UINT16 TempBufferLength; + EFI_STATUS Status; + + TempBufferLength = 0; + + // + // Try to find the actual buffer size for HiiHandle Buffer. + // + Status = Hii->FindHandles (Hii, &TempBufferLength, *HiiHandleBuffer); + + if (Status == EFI_BUFFER_TOO_SMALL) { + *HiiHandleBuffer = AllocateZeroPool (TempBufferLength); + Status = Hii->FindHandles (Hii, &TempBufferLength, *HiiHandleBuffer); + // + // we should not fail here. + // + ASSERT_EFI_ERROR (Status); + } + + *HandleBufferLength = TempBufferLength; + + return Status; + +}