From ff51746bd46b25a88eb6c131c52e1d9fd610af28 Mon Sep 17 00:00:00 2001 From: jcarsey Date: Fri, 12 Nov 2010 21:40:12 +0000 Subject: update error handling to use less ASSERT. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11053 6f19259b-4bc3-4df7-8a09-765794883524 --- .../UefiHandleParsingLib/UefiHandleParsingLib.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'ShellPkg/Library/UefiHandleParsingLib') diff --git a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c index 107b3354e5..6b59bfd6ab 100644 --- a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c +++ b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c @@ -1105,7 +1105,9 @@ ParseHandleDatabaseForChildControllers( BOOLEAN Found; EFI_HANDLE *HandleBufferForReturn; - ASSERT (MatchingHandleCount != NULL); + if (MatchingHandleCount == NULL) { + return (EFI_INVALID_PARAMETER); + } Status = PARSE_HANDLE_DATABASE_UEFI_DRIVERS ( ControllerHandle, @@ -1116,10 +1118,13 @@ ParseHandleDatabaseForChildControllers( return Status; } - HandleBufferForReturn = GetHandleListByProtocol(&gEfiDriverBindingProtocolGuid); + // + // Get a buffer big enough for all the controllers. + // + HandleBufferForReturn = GetHandleListByProtocol(&gEfiDevicePathProtocolGuid); if (HandleBufferForReturn == NULL) { FreePool (DriverBindingHandleBuffer); - return Status; + return (EFI_NOT_FOUND); } *MatchingHandleCount = 0; @@ -1361,7 +1366,8 @@ GetHandleListByProtocol ( @param[in] ProtocolGuids A NULL terminated list of protocol GUIDs. @retval NULL A memory allocation failed. - @return A NULL terminated list of handles. + @retval NULL ProtocolGuids was NULL. + @return A NULL terminated list of EFI_HANDLEs. **/ EFI_HANDLE* EFIAPI @@ -1397,7 +1403,6 @@ GetHandleListByProtocolList ( } HandleList = AllocateZeroPool(TotalSize); - ASSERT(HandleList != NULL); if (HandleList == NULL) { return (NULL); } @@ -1405,16 +1410,16 @@ GetHandleListByProtocolList ( Size = 0; for (GuidWalker = ProtocolGuids ; GuidWalker != NULL && *GuidWalker != NULL ; GuidWalker++){ TempSize = TotalSize - Size; - Status = gBS->LocateHandle(ByProtocol, (EFI_GUID*)(*GuidWalker), NULL, &TempSize, HandleList+((TotalSize - Size)/sizeof(EFI_HANDLE))); + Status = gBS->LocateHandle(ByProtocol, (EFI_GUID*)(*GuidWalker), NULL, &TempSize, HandleList+(Size/sizeof(EFI_HANDLE))); // // Allow for missing protocols... Only update the 'used' size upon success. // if (!EFI_ERROR(Status)) { - Size = TempSize; + Size += TempSize; } } - HandleList[(TotalSize/sizeof(EFI_HANDLE))-1] = NULL; + ASSERT(HandleList[(TotalSize/sizeof(EFI_HANDLE))-1] == NULL); for (HandleWalker1 = HandleList ; HandleWalker1 != NULL && *HandleWalker1 != NULL ; HandleWalker1++) { for (HandleWalker2 = HandleWalker1 + 1; HandleWalker2 != NULL && *HandleWalker2 != NULL ; HandleWalker2++) { -- cgit v1.2.3