BOOLEAN Found;\r
EFI_HANDLE *HandleBufferForReturn;\r
\r
- ASSERT (MatchingHandleCount != NULL);\r
+ if (MatchingHandleCount == NULL) {\r
+ return (EFI_INVALID_PARAMETER);\r
+ }\r
\r
Status = PARSE_HANDLE_DATABASE_UEFI_DRIVERS (\r
ControllerHandle,\r
return Status;\r
}\r
\r
- HandleBufferForReturn = GetHandleListByProtocol(&gEfiDriverBindingProtocolGuid);\r
+ //\r
+ // Get a buffer big enough for all the controllers.\r
+ //\r
+ HandleBufferForReturn = GetHandleListByProtocol(&gEfiDevicePathProtocolGuid);\r
if (HandleBufferForReturn == NULL) {\r
FreePool (DriverBindingHandleBuffer);\r
- return Status;\r
+ return (EFI_NOT_FOUND);\r
}\r
\r
*MatchingHandleCount = 0;\r
@param[in] ProtocolGuids A NULL terminated list of protocol GUIDs.\r
\r
@retval NULL A memory allocation failed.\r
- @return A NULL terminated list of handles.\r
+ @retval NULL ProtocolGuids was NULL.\r
+ @return A NULL terminated list of EFI_HANDLEs.\r
**/\r
EFI_HANDLE*\r
EFIAPI\r
}\r
\r
HandleList = AllocateZeroPool(TotalSize);\r
- ASSERT(HandleList != NULL);\r
if (HandleList == NULL) {\r
return (NULL);\r
}\r
Size = 0;\r
for (GuidWalker = ProtocolGuids ; GuidWalker != NULL && *GuidWalker != NULL ; GuidWalker++){\r
TempSize = TotalSize - Size;\r
- Status = gBS->LocateHandle(ByProtocol, (EFI_GUID*)(*GuidWalker), NULL, &TempSize, HandleList+((TotalSize - Size)/sizeof(EFI_HANDLE)));\r
+ Status = gBS->LocateHandle(ByProtocol, (EFI_GUID*)(*GuidWalker), NULL, &TempSize, HandleList+(Size/sizeof(EFI_HANDLE)));\r
\r
//\r
// Allow for missing protocols... Only update the 'used' size upon success.\r
//\r
if (!EFI_ERROR(Status)) {\r
- Size = TempSize;\r
+ Size += TempSize;\r
}\r
}\r
- HandleList[(TotalSize/sizeof(EFI_HANDLE))-1] = NULL;\r
+ ASSERT(HandleList[(TotalSize/sizeof(EFI_HANDLE))-1] == NULL);\r
\r
for (HandleWalker1 = HandleList ; HandleWalker1 != NULL && *HandleWalker1 != NULL ; HandleWalker1++) {\r
for (HandleWalker2 = HandleWalker1 + 1; HandleWalker2 != NULL && *HandleWalker2 != NULL ; HandleWalker2++) {\r
@param[in] Handle The pointer to EFI_FILE_PROTOCOL to convert.\r
@param[in] Path The path to the file for verification.\r
\r
- @return a SHELL_FILE_HANDLE representing the same file.\r
+ @return A SHELL_FILE_HANDLE representing the same file.\r
+ @retval NULL There was not enough memory.\r
**/\r
SHELL_FILE_HANDLE\r
EFIAPI\r
\r
if (Path != NULL) {\r
Buffer = AllocateZeroPool(sizeof(SHELL_COMMAND_FILE_HANDLE));\r
- ASSERT(Buffer != NULL);\r
+ if (Buffer == NULL) {\r
+ return (NULL);\r
+ }\r
NewNode = AllocatePool(sizeof(BUFFER_LIST));\r
- ASSERT(NewNode != NULL);\r
+ if (NewNode == NULL) {\r
+ return (NULL);\r
+ }\r
Buffer->FileHandle = (EFI_FILE_PROTOCOL*)Handle;\r
Buffer->Path = StrnCatGrow(&Buffer->Path, NULL, Path, 0);\r
+ if (Buffer->Path == NULL) {\r
+ return (NULL);\r
+ }\r
NewNode->Buffer = Buffer;\r
\r
InsertHeadList(&mFileHandleList.Link, &NewNode->Link);\r
; Node = (BUFFER_LIST*)GetNextNode(&mFileHandleList.Link, &Node->Link)\r
){\r
if ((Node->Buffer) && (((SHELL_COMMAND_FILE_HANDLE *)Node->Buffer)->FileHandle == Handle)){\r
- SHELL_FREE_NON_NULL(((SHELL_COMMAND_FILE_HANDLE *)Node->Buffer)->Path);\r
RemoveEntryList(&Node->Link);\r
+ SHELL_FREE_NON_NULL(((SHELL_COMMAND_FILE_HANDLE *)Node->Buffer)->Path);\r
+ SHELL_FREE_NON_NULL(Node->Buffer);\r
+ SHELL_FREE_NON_NULL(Node);\r
return (TRUE);\r
}\r
}\r