From ff51746bd46b25a88eb6c131c52e1d9fd610af28 Mon Sep 17 00:00:00 2001 From: jcarsey Date: Fri, 12 Nov 2010 21:40:12 +0000 Subject: [PATCH] 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 --- ShellPkg/Include/Library/HandleParsingLib.h | 3 ++- .../UefiHandleParsingLib.c | 21 ++++++++++++------- .../UefiShellCommandLib/UefiShellCommandLib.c | 18 ++++++++++++---- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/ShellPkg/Include/Library/HandleParsingLib.h b/ShellPkg/Include/Library/HandleParsingLib.h index b8166ff76f..8c0b81d12c 100644 --- a/ShellPkg/Include/Library/HandleParsingLib.h +++ b/ShellPkg/Include/Library/HandleParsingLib.h @@ -331,7 +331,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 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++) { diff --git a/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c b/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c index 4aec5d44ca..2dd39ef3cf 100644 --- a/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c +++ b/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c @@ -1171,7 +1171,8 @@ ConvertShellHandleToEfiFileProtocol( @param[in] Handle The pointer to EFI_FILE_PROTOCOL to convert. @param[in] Path The path to the file for verification. - @return a SHELL_FILE_HANDLE representing the same file. + @return A SHELL_FILE_HANDLE representing the same file. + @retval NULL There was not enough memory. **/ SHELL_FILE_HANDLE EFIAPI @@ -1185,11 +1186,18 @@ ConvertEfiFileProtocolToShellHandle( if (Path != NULL) { Buffer = AllocateZeroPool(sizeof(SHELL_COMMAND_FILE_HANDLE)); - ASSERT(Buffer != NULL); + if (Buffer == NULL) { + return (NULL); + } NewNode = AllocatePool(sizeof(BUFFER_LIST)); - ASSERT(NewNode != NULL); + if (NewNode == NULL) { + return (NULL); + } Buffer->FileHandle = (EFI_FILE_PROTOCOL*)Handle; Buffer->Path = StrnCatGrow(&Buffer->Path, NULL, Path, 0); + if (Buffer->Path == NULL) { + return (NULL); + } NewNode->Buffer = Buffer; InsertHeadList(&mFileHandleList.Link, &NewNode->Link); @@ -1244,8 +1252,10 @@ ShellFileHandleRemove( ; Node = (BUFFER_LIST*)GetNextNode(&mFileHandleList.Link, &Node->Link) ){ if ((Node->Buffer) && (((SHELL_COMMAND_FILE_HANDLE *)Node->Buffer)->FileHandle == Handle)){ - SHELL_FREE_NON_NULL(((SHELL_COMMAND_FILE_HANDLE *)Node->Buffer)->Path); RemoveEntryList(&Node->Link); + SHELL_FREE_NON_NULL(((SHELL_COMMAND_FILE_HANDLE *)Node->Buffer)->Path); + SHELL_FREE_NON_NULL(Node->Buffer); + SHELL_FREE_NON_NULL(Node); return (TRUE); } } -- 2.39.2