return Status;\r
}\r
\r
- HandleBufferForReturn = GetHandleListByPotocol(&gEfiDriverBindingProtocolGuid);\r
+ HandleBufferForReturn = GetHandleListByProtocol(&gEfiDriverBindingProtocolGuid);\r
if (HandleBufferForReturn == NULL) {\r
FreePool (DriverBindingHandleBuffer);\r
return Status;\r
**/\r
EFI_HANDLE*\r
EFIAPI\r
-GetHandleListByPotocol (\r
+GetHandleListByProtocol (\r
IN CONST EFI_GUID *ProtocolGuid OPTIONAL\r
)\r
{\r
Status = gBS->LocateHandle(AllHandles, NULL, NULL, &Size, HandleList);\r
if (Status == EFI_BUFFER_TOO_SMALL) {\r
HandleList = AllocatePool(Size + sizeof(EFI_HANDLE));\r
+ if (HandleList == NULL) {\r
+ return (NULL);\r
+ }\r
Status = gBS->LocateHandle(AllHandles, NULL, NULL, &Size, HandleList);\r
HandleList[Size/sizeof(EFI_HANDLE)] = NULL;\r
}\r
Status = gBS->LocateHandle(ByProtocol, (EFI_GUID*)ProtocolGuid, NULL, &Size, HandleList);\r
if (Status == EFI_BUFFER_TOO_SMALL) {\r
HandleList = AllocatePool(Size + sizeof(EFI_HANDLE));\r
+ if (HandleList == NULL) {\r
+ return (NULL);\r
+ }\r
Status = gBS->LocateHandle(ByProtocol, (EFI_GUID*)ProtocolGuid, NULL, &Size, HandleList);\r
HandleList[Size/sizeof(EFI_HANDLE)] = NULL;\r
}\r
**/\r
EFI_HANDLE*\r
EFIAPI\r
-GetHandleListByPotocolList (\r
+GetHandleListByProtocolList (\r
IN CONST EFI_GUID **ProtocolGuids\r
)\r
{\r
EFI_HANDLE *HandleList;\r
UINTN Size;\r
UINTN TotalSize;\r
+ UINTN TempSize;\r
EFI_STATUS Status;\r
CONST EFI_GUID **GuidWalker;\r
EFI_HANDLE *HandleWalker1;\r
TotalSize += Size;\r
}\r
}\r
- HandleList = AllocatePool(TotalSize);\r
+\r
+ //\r
+ // No handles were found... \r
+ //\r
+ if (TotalSize == sizeof(EFI_HANDLE)) {\r
+ return (NULL);\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
- Size = TotalSize - Size;\r
- Status = gBS->LocateHandle(ByProtocol, (EFI_GUID*)(*GuidWalker), NULL, &Size, HandleList+((TotalSize - Size)/sizeof(EFI_HANDLE)));\r
- ASSERT_EFI_ERROR(Status);\r
+ TempSize = TotalSize - Size;\r
+ Status = gBS->LocateHandle(ByProtocol, (EFI_GUID*)(*GuidWalker), NULL, &TempSize, HandleList+((TotalSize - 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
+ }\r
}\r
HandleList[(TotalSize/sizeof(EFI_HANDLE))-1] = NULL;\r
\r