@retval A string representation of the type allocated from BS Pool.\r
**/\r
CHAR16*\r
-EFIAPI\r
ConvertMemoryType (\r
IN CONST EFI_MEMORY_TYPE Memory\r
)\r
@retval A string representation of the type allocated from BS Pool.\r
**/\r
CHAR16*\r
-EFIAPI\r
ConvertPixelFormat (\r
IN CONST EFI_GRAPHICS_PIXEL_FORMAT Fmt\r
)\r
IN CONST BOOLEAN Verbose\r
)\r
{\r
- EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
- EFI_STATUS Status;
- CHAR16 *RetVal;
- CHAR16 *Temp;
- CHAR16 *Fmt;
- CHAR16 *TempRetVal;
- UINTN GopInfoSize;
- UINT32 Mode;
- EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *GopInfo;
+ EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;\r
+ EFI_STATUS Status;\r
+ CHAR16 *RetVal;\r
+ CHAR16 *Temp;\r
+ CHAR16 *Fmt;\r
+ CHAR16 *TempRetVal;\r
+ UINTN GopInfoSize;\r
+ UINT32 Mode;\r
+ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *GopInfo;\r
\r
if (!Verbose) {\r
return (CatSPrint(NULL, L"GraphicsOutput"));\r
GraphicsOutput->Mode->Info->PixelFormat!=PixelBitMask?0:GraphicsOutput->Mode->Info->PixelInformation.BlueMask\r
);\r
\r
- SHELL_FREE_NON_NULL (Temp);
-
- Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN (STR_GOP_RES_LIST_MAIN), NULL);
-
- TempRetVal = CatSPrint (RetVal, Temp);
- SHELL_FREE_NON_NULL (RetVal);
- RetVal = TempRetVal;
- SHELL_FREE_NON_NULL (Temp);
-
- Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN (STR_GOP_RES_LIST_ENTRY), NULL);
-
- for (Mode = 0; Mode < GraphicsOutput->Mode->MaxMode; Mode++) {
- Status = GraphicsOutput->QueryMode (
- GraphicsOutput,
- Mode,
- &GopInfoSize,
- &GopInfo
- );
- if (EFI_ERROR (Status)) {
- continue;
- }
-
- TempRetVal = CatSPrint (
- RetVal,
- Temp,
- Mode,
- GopInfo->HorizontalResolution,
- GopInfo->VerticalResolution
- );
-
- SHELL_FREE_NON_NULL (GopInfo);
- SHELL_FREE_NON_NULL (RetVal);
- RetVal = TempRetVal;
- }
-
+ SHELL_FREE_NON_NULL (Temp);\r
+\r
+ Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN (STR_GOP_RES_LIST_MAIN), NULL);\r
+ if (Temp == NULL) {\r
+ SHELL_FREE_NON_NULL (RetVal);\r
+ goto EXIT;\r
+ }\r
+\r
+ TempRetVal = CatSPrint (RetVal, Temp);\r
+ SHELL_FREE_NON_NULL (RetVal);\r
+ if (TempRetVal == NULL) {\r
+ goto EXIT;\r
+ }\r
+ RetVal = TempRetVal;\r
+ SHELL_FREE_NON_NULL (Temp);\r
+\r
+ Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN (STR_GOP_RES_LIST_ENTRY), NULL);\r
+ if (Temp == NULL) {\r
+ SHELL_FREE_NON_NULL (RetVal);\r
+ goto EXIT;\r
+ }\r
+\r
+\r
+ for (Mode = 0; Mode < GraphicsOutput->Mode->MaxMode; Mode++) {\r
+ Status = GraphicsOutput->QueryMode (\r
+ GraphicsOutput,\r
+ Mode,\r
+ &GopInfoSize,\r
+ &GopInfo\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ continue;\r
+ }\r
+\r
+ TempRetVal = CatSPrint (\r
+ RetVal,\r
+ Temp,\r
+ Mode,\r
+ GopInfo->HorizontalResolution,\r
+ GopInfo->VerticalResolution\r
+ );\r
+\r
+ SHELL_FREE_NON_NULL (GopInfo);\r
+ SHELL_FREE_NON_NULL (RetVal);\r
+ RetVal = TempRetVal;\r
+ }\r
+\r
+\r
+EXIT:\r
SHELL_FREE_NON_NULL(Temp);\r
SHELL_FREE_NON_NULL(Fmt);\r
\r
}\r
\r
/**\r
- Function to dump information about EDID Discovered Protocol.
-
- This will allocate the return buffer from boot services pool.
-
- @param[in] TheHandle The handle that has LoadedImage installed.
- @param[in] Verbose TRUE for additional information, FALSE otherwise.
-
- @retval A poitner to a string containing the information.
-**/
-CHAR16*
-EFIAPI
-EdidDiscoveredProtocolDumpInformation (
- IN CONST EFI_HANDLE TheHandle,
- IN CONST BOOLEAN Verbose
- )
-{
- EFI_EDID_DISCOVERED_PROTOCOL *EdidDiscovered;
- EFI_STATUS Status;
- CHAR16 *RetVal;
- CHAR16 *Temp;
- CHAR16 *TempRetVal;
-
- if (!Verbose) {
- return (CatSPrint(NULL, L"EDIDDiscovered"));
- }
-
- Status = gBS->OpenProtocol (
- TheHandle,
- &gEfiEdidDiscoveredProtocolGuid,
- (VOID**)&EdidDiscovered,
- NULL,
- NULL,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL
- );
-
- if (EFI_ERROR (Status)) {
- return NULL;
- }
-
- Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_EDID_DISCOVERED_MAIN), NULL);
- if (Temp == NULL) {
- return NULL;
- }
-
- RetVal = CatSPrint (NULL, Temp, EdidDiscovered->SizeOfEdid);
- SHELL_FREE_NON_NULL (Temp);
-
- if(EdidDiscovered->SizeOfEdid != 0) {
- Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_EDID_DISCOVERED_DATA), NULL);
- if (Temp == NULL) {
- SHELL_FREE_NON_NULL (RetVal);
- return NULL;
- }
- TempRetVal = CatSPrint (RetVal, Temp);
- SHELL_FREE_NON_NULL (RetVal);
- RetVal = TempRetVal;
-
- TempRetVal = CatSDumpHex (RetVal, 7, 0, EdidDiscovered->SizeOfEdid, EdidDiscovered->Edid);
- RetVal = TempRetVal;
- }
- return RetVal;
-}
-
-/**
- Function to dump information about EDID Active Protocol.
-
- This will allocate the return buffer from boot services pool.
-
- @param[in] TheHandle The handle that has LoadedImage installed.
- @param[in] Verbose TRUE for additional information, FALSE otherwise.
-
- @retval A poitner to a string containing the information.
-**/
-CHAR16*
-EFIAPI
-EdidActiveProtocolDumpInformation (
- IN CONST EFI_HANDLE TheHandle,
- IN CONST BOOLEAN Verbose
- )
-{
- EFI_EDID_ACTIVE_PROTOCOL *EdidActive;
- EFI_STATUS Status;
- CHAR16 *RetVal;
- CHAR16 *Temp;
- CHAR16 *TempRetVal;
-
- if (!Verbose) {
- return (CatSPrint(NULL, L"EDIDActive"));
- }
-
- Status = gBS->OpenProtocol (
- TheHandle,
- &gEfiEdidActiveProtocolGuid,
- (VOID**)&EdidActive,
- NULL,
- NULL,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL
- );
-
- if (EFI_ERROR (Status)) {
- return NULL;
- }
-
- Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_EDID_ACTIVE_MAIN), NULL);
- if (Temp == NULL) {
- return NULL;
- }
-
- RetVal = CatSPrint (NULL, Temp, EdidActive->SizeOfEdid);
- SHELL_FREE_NON_NULL (Temp);
-
- if(EdidActive->SizeOfEdid != 0) {
- Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_EDID_ACTIVE_DATA), NULL);
- if (Temp == NULL) {
- SHELL_FREE_NON_NULL (RetVal);
- return NULL;
- }
- TempRetVal = CatSPrint (RetVal, Temp);
- SHELL_FREE_NON_NULL (RetVal);
- RetVal = TempRetVal;
-
- TempRetVal = CatSDumpHex (RetVal, 7, 0, EdidActive->SizeOfEdid, EdidActive->Edid);
- RetVal = TempRetVal;
- }
- return RetVal;
-}
-
-/**
+ Function to dump information about EDID Discovered Protocol.\r
+\r
+ This will allocate the return buffer from boot services pool.\r
+\r
+ @param[in] TheHandle The handle that has LoadedImage installed.\r
+ @param[in] Verbose TRUE for additional information, FALSE otherwise.\r
+\r
+ @retval A pointer to a string containing the information.\r
+**/\r
+CHAR16*\r
+EFIAPI\r
+EdidDiscoveredProtocolDumpInformation (\r
+ IN CONST EFI_HANDLE TheHandle,\r
+ IN CONST BOOLEAN Verbose\r
+ )\r
+{\r
+ EFI_EDID_DISCOVERED_PROTOCOL *EdidDiscovered;\r
+ EFI_STATUS Status;\r
+ CHAR16 *RetVal;\r
+ CHAR16 *Temp;\r
+ CHAR16 *TempRetVal;\r
+\r
+ if (!Verbose) {\r
+ return (CatSPrint (NULL, L"EDIDDiscovered"));\r
+ }\r
+\r
+ Status = gBS->OpenProtocol (\r
+ TheHandle,\r
+ &gEfiEdidDiscoveredProtocolGuid,\r
+ (VOID**)&EdidDiscovered,\r
+ NULL,\r
+ NULL,\r
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+ );\r
+\r
+ if (EFI_ERROR (Status)) {\r
+ return NULL;\r
+ }\r
+\r
+ Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN (STR_EDID_DISCOVERED_MAIN), NULL);\r
+ if (Temp == NULL) {\r
+ return NULL;\r
+ }\r
+\r
+ RetVal = CatSPrint (NULL, Temp, EdidDiscovered->SizeOfEdid);\r
+ SHELL_FREE_NON_NULL (Temp);\r
+\r
+ if (EdidDiscovered->SizeOfEdid != 0) {\r
+ Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN (STR_EDID_DISCOVERED_DATA), NULL);\r
+ if (Temp == NULL) {\r
+ SHELL_FREE_NON_NULL (RetVal);\r
+ return NULL;\r
+ }\r
+ TempRetVal = CatSPrint (RetVal, Temp);\r
+ SHELL_FREE_NON_NULL (RetVal);\r
+ RetVal = TempRetVal;\r
+\r
+ TempRetVal = CatSDumpHex (RetVal, 7, 0, EdidDiscovered->SizeOfEdid, EdidDiscovered->Edid);\r
+ RetVal = TempRetVal;\r
+ }\r
+ return RetVal;\r
+}\r
+\r
+/**\r
+ Function to dump information about EDID Active Protocol.\r
+\r
+ This will allocate the return buffer from boot services pool.\r
+\r
+ @param[in] TheHandle The handle that has LoadedImage installed.\r
+ @param[in] Verbose TRUE for additional information, FALSE otherwise.\r
+\r
+ @retval A pointer to a string containing the information.\r
+**/\r
+CHAR16*\r
+EFIAPI\r
+EdidActiveProtocolDumpInformation (\r
+ IN CONST EFI_HANDLE TheHandle,\r
+ IN CONST BOOLEAN Verbose\r
+ )\r
+{\r
+ EFI_EDID_ACTIVE_PROTOCOL *EdidActive;\r
+ EFI_STATUS Status;\r
+ CHAR16 *RetVal;\r
+ CHAR16 *Temp;\r
+ CHAR16 *TempRetVal;\r
+\r
+ if (!Verbose) {\r
+ return (CatSPrint (NULL, L"EDIDActive"));\r
+ }\r
+\r
+ Status = gBS->OpenProtocol (\r
+ TheHandle,\r
+ &gEfiEdidActiveProtocolGuid,\r
+ (VOID**)&EdidActive,\r
+ NULL,\r
+ NULL,\r
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+ );\r
+\r
+ if (EFI_ERROR (Status)) {\r
+ return NULL;\r
+ }\r
+\r
+ Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN (STR_EDID_ACTIVE_MAIN), NULL);\r
+ if (Temp == NULL) {\r
+ return NULL;\r
+ }\r
+\r
+ RetVal = CatSPrint (NULL, Temp, EdidActive->SizeOfEdid);\r
+ SHELL_FREE_NON_NULL (Temp);\r
+\r
+ if (EdidActive->SizeOfEdid != 0) {\r
+ Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN (STR_EDID_ACTIVE_DATA), NULL);\r
+ if (Temp == NULL) {\r
+ SHELL_FREE_NON_NULL (RetVal);\r
+ return NULL;\r
+ }\r
+ TempRetVal = CatSPrint (RetVal, Temp);\r
+ SHELL_FREE_NON_NULL (RetVal);\r
+ RetVal = TempRetVal;\r
+\r
+ TempRetVal = CatSDumpHex (RetVal, 7, 0, EdidActive->SizeOfEdid, EdidActive->Edid);\r
+ RetVal = TempRetVal;\r
+ }\r
+ return RetVal;\r
+}\r
+\r
+/**\r
Function to dump information about PciRootBridgeIo.\r
\r
This will allocate the return buffer from boot services pool.\r
ASSERT_EFI_ERROR(Status);\r
\r
RetVal = AllocateZeroPool(VersionStringSize);\r
- ASSERT(RetVal != NULL);\r
- UnicodeSPrint(RetVal, VersionStringSize, L"0x%08x", DriverEfiVersion->FirmwareVersion);\r
+ if (RetVal != NULL) {\r
+ UnicodeSPrint (RetVal, VersionStringSize, L"0x%08x", DriverEfiVersion->FirmwareVersion);\r
+ }\r
return (RetVal);\r
}\r
+/**\r
+ Function to convert device path to string.\r
+\r
+ This will allocate the return buffer from boot services pool.\r
+\r
+ @param[in] DevPath Pointer to device path instance.\r
+ @param[in] Verbose TRUE for additional information, FALSE otherwise.\r
+ @param[in] Length Maximum allowed text length of the device path.\r
+\r
+ @retval A pointer to a string containing the information.\r
+**/\r
+CHAR16*\r
+ConvertDevicePathToShortText(\r
+ IN CONST EFI_DEVICE_PATH_PROTOCOL *DevPath,\r
+ IN CONST BOOLEAN Verbose,\r
+ IN CONST UINTN Length\r
+ )\r
+{\r
+ CHAR16 *Temp;\r
+ CHAR16 *Temp2;\r
+ UINTN Size;\r
+\r
+ //\r
+ // I cannot decide whether to allow shortcuts here (the second BOOLEAN on the next line)\r
+ //\r
+ Temp = ConvertDevicePathToText(DevPath, TRUE, TRUE);\r
+ if (!Verbose && Temp != NULL && StrLen(Temp) > Length) {\r
+ Temp2 = NULL;\r
+ Size = 0;\r
+ Temp2 = StrnCatGrow(&Temp2, &Size, L"..", 0);\r
+ Temp2 = StrnCatGrow(&Temp2, &Size, Temp+(StrLen(Temp) - (Length - 2)), 0);\r
+ FreePool(Temp);\r
+ Temp = Temp2;\r
+ }\r
+ return (Temp);\r
+}\r
\r
/**\r
Function to dump information about DevicePath protocol.\r
@param[in] TheHandle The handle that has the protocol installed.\r
@param[in] Verbose TRUE for additional information, FALSE otherwise.\r
\r
- @retval A poitner to a string containing the information.\r
+ @retval A pointer to a string containing the information.\r
**/\r
CHAR16*\r
EFIAPI\r
{\r
EFI_DEVICE_PATH_PROTOCOL *DevPath;\r
CHAR16 *Temp;\r
- CHAR16 *Temp2;\r
EFI_STATUS Status;\r
Temp = NULL;\r
\r
Status = gBS->OpenProtocol(TheHandle, &gEfiDevicePathProtocolGuid, (VOID**)&DevPath, gImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
if (!EFI_ERROR(Status)) {\r
- //\r
- // I cannot decide whether to allow shortcuts here (the second BOOLEAN on the next line)\r
- //\r
- Temp = ConvertDevicePathToText(DevPath, TRUE, TRUE);\r
+ Temp = ConvertDevicePathToShortText (DevPath, Verbose, 30);\r
gBS->CloseProtocol(TheHandle, &gEfiDevicePathProtocolGuid, gImageHandle, NULL);\r
}\r
- if (!Verbose && Temp != NULL && StrLen(Temp) > 30) {\r
- Temp2 = NULL;\r
- Temp2 = StrnCatGrow(&Temp2, NULL, Temp+(StrLen(Temp) - 30), 30);\r
- FreePool(Temp);\r
- Temp = Temp2;\r
+ return (Temp);\r
+}\r
+\r
+/**\r
+ Function to dump information about LoadedImageDevicePath protocol.\r
+\r
+ This will allocate the return buffer from boot services pool.\r
+\r
+ @param[in] TheHandle The handle that has the protocol installed.\r
+ @param[in] Verbose TRUE for additional information, FALSE otherwise.\r
+\r
+ @retval A pointer to a string containing the information.\r
+**/\r
+CHAR16*\r
+EFIAPI\r
+LoadedImageDevicePathProtocolDumpInformation(\r
+ IN CONST EFI_HANDLE TheHandle,\r
+ IN CONST BOOLEAN Verbose\r
+ )\r
+{\r
+ EFI_DEVICE_PATH_PROTOCOL *DevPath;\r
+ CHAR16 *Temp;\r
+ EFI_STATUS Status;\r
+ Temp = NULL;\r
+\r
+ Status = gBS->OpenProtocol(TheHandle, &gEfiLoadedImageDevicePathProtocolGuid, (VOID**)&DevPath, gImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
+ if (!EFI_ERROR(Status)) {\r
+ Temp = ConvertDevicePathToShortText (DevPath, Verbose, 30);\r
+ gBS->CloseProtocol(TheHandle, &gEfiDevicePathProtocolGuid, gImageHandle, NULL);\r
}\r
return (Temp);\r
}\r
RetVal,\r
TempStr,\r
((EFI_ADAPTER_INFO_UNDI_IPV6_SUPPORT *)InformationBlock)->Ipv6Support\r
- ); \r
+ );\r
SHELL_FREE_NON_NULL (RetVal);\r
RetVal = TempRetVal;\r
} else {\r
TempStr,\r
Index,\r
ImageInfoV1[Index].ImageIndex,\r
- ImageInfoV1[Index].ImageTypeId,\r
+ &ImageInfoV1[Index].ImageTypeId,\r
ImageInfoV1[Index].ImageId,\r
ImageInfoV1[Index].ImageIdName,\r
ImageInfoV1[Index].Version,\r
TempStr,\r
Index,\r
ImageInfoV2[Index].ImageIndex,\r
- ImageInfoV2[Index].ImageTypeId,\r
+ &ImageInfoV2[Index].ImageTypeId,\r
ImageInfoV2[Index].ImageId,\r
ImageInfoV2[Index].ImageIdName,\r
ImageInfoV2[Index].Version,\r
TempStr,\r
Index,\r
ImageInfo[Index].ImageIndex,\r
- ImageInfo[Index].ImageTypeId,\r
+ &ImageInfo[Index].ImageTypeId,\r
ImageInfo[Index].ImageId,\r
ImageInfo[Index].ImageIdName,\r
ImageInfo[Index].Version,\r
STATIC CONST GUID_INFO_BLOCK mGuidStringList[] = {\r
{STRING_TOKEN(STR_LOADED_IMAGE), &gEfiLoadedImageProtocolGuid, LoadedImageProtocolDumpInformation},\r
{STRING_TOKEN(STR_DEVICE_PATH), &gEfiDevicePathProtocolGuid, DevicePathProtocolDumpInformation},\r
- {STRING_TOKEN(STR_IMAGE_PATH), &gEfiLoadedImageDevicePathProtocolGuid, DevicePathProtocolDumpInformation},\r
+ {STRING_TOKEN(STR_IMAGE_PATH), &gEfiLoadedImageDevicePathProtocolGuid, LoadedImageDevicePathProtocolDumpInformation},\r
{STRING_TOKEN(STR_DEVICE_PATH_UTIL), &gEfiDevicePathUtilitiesProtocolGuid, NULL},\r
{STRING_TOKEN(STR_DEVICE_PATH_TXT), &gEfiDevicePathToTextProtocolGuid, NULL},\r
{STRING_TOKEN(STR_DEVICE_PATH_FTXT), &gEfiDevicePathFromTextProtocolGuid, NULL},\r
{STRING_TOKEN(STR_ABS_POINTER), &gEfiAbsolutePointerProtocolGuid, NULL},\r
{STRING_TOKEN(STR_SERIAL_IO), &gEfiSerialIoProtocolGuid, NULL},\r
{STRING_TOKEN(STR_GRAPHICS_OUTPUT), &gEfiGraphicsOutputProtocolGuid, GraphicsOutputProtocolDumpInformation},\r
- {STRING_TOKEN(STR_EDID_DISCOVERED), &gEfiEdidDiscoveredProtocolGuid, EdidDiscoveredProtocolDumpInformation},
- {STRING_TOKEN(STR_EDID_ACTIVE), &gEfiEdidActiveProtocolGuid, EdidActiveProtocolDumpInformation},
+ {STRING_TOKEN(STR_EDID_DISCOVERED), &gEfiEdidDiscoveredProtocolGuid, EdidDiscoveredProtocolDumpInformation},\r
+ {STRING_TOKEN(STR_EDID_ACTIVE), &gEfiEdidActiveProtocolGuid, EdidActiveProtocolDumpInformation},\r
{STRING_TOKEN(STR_EDID_OVERRIDE), &gEfiEdidOverrideProtocolGuid, NULL},\r
{STRING_TOKEN(STR_CON_IN), &gEfiConsoleInDeviceGuid, NULL},\r
{STRING_TOKEN(STR_CON_OUT), &gEfiConsoleOutDeviceGuid, NULL},\r
@return The node.\r
**/\r
CONST GUID_INFO_BLOCK *\r
-EFIAPI\r
InternalShellGetNodeFromGuid(\r
IN CONST EFI_GUID* Guid\r
)\r
@retval EFI_INVALID_PARAMETER Guid NameId was invalid\r
**/\r
EFI_STATUS\r
-EFIAPI\r
InsertNewGuidNameMapping(\r
IN CONST EFI_GUID *Guid,\r
IN CONST EFI_STRING_ID NameID,\r
@retval EFI_SUCCESS The operation was successful.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
InternalShellInitHandleList(\r
VOID\r
)\r
}\r
for (mHandleList.NextIndex = 1 ; mHandleList.NextIndex <= HandleCount ; mHandleList.NextIndex++){\r
ListWalker = AllocateZeroPool(sizeof(HANDLE_LIST));\r
- ASSERT(ListWalker != NULL);\r
- ListWalker->TheHandle = HandleBuffer[mHandleList.NextIndex-1];\r
- ListWalker->TheIndex = mHandleList.NextIndex;\r
- InsertTailList(&mHandleList.List.Link,&ListWalker->Link);\r
+ if (ListWalker != NULL) {\r
+ ListWalker->TheHandle = HandleBuffer[mHandleList.NextIndex - 1];\r
+ ListWalker->TheIndex = mHandleList.NextIndex;\r
+ InsertTailList (&mHandleList.List.Link, &ListWalker->Link);\r
+ }\r
}\r
FreePool(HandleBuffer);\r
return (EFI_SUCCESS);\r
FreePool (ProtocolBuffer);\r
\r
ListWalker = AllocateZeroPool(sizeof(HANDLE_LIST));\r
- ASSERT(ListWalker != NULL);\r
+ if (ListWalker == NULL) {\r
+ return 0;\r
+ }\r
ListWalker->TheHandle = TheHandle;\r
ListWalker->TheIndex = mHandleList.NextIndex++;\r
InsertTailList(&mHandleList.List.Link,&ListWalker->Link);\r
}\r
\r
*HandleType = AllocateZeroPool (*HandleCount * sizeof (UINTN));\r
- ASSERT(*HandleType != NULL);\r
+ if (*HandleType == NULL) {\r
+ SHELL_FREE_NON_NULL (*HandleBuffer);\r
+ *HandleCount = 0;\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
\r
DriverBindingHandleIndex = -1;\r
for (HandleIndex = 0; HandleIndex < *HandleCount; HandleIndex++) {\r
(*HandleType)[HandleIndex] |= (UINTN)HR_COMPONENT_NAME_HANDLE;\r
} else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDevicePathProtocolGuid) ) {\r
(*HandleType)[HandleIndex] |= (UINTN)HR_DEVICE_HANDLE;\r
- } else {\r
- DEBUG_CODE_BEGIN();\r
- ASSERT((*HandleType)[HandleIndex] == (*HandleType)[HandleIndex]);\r
- DEBUG_CODE_END();\r
}\r
//\r
// Retrieve the list of agents that have opened each protocol\r
// Allocate a handle buffer for the number of handles that matched the attributes in Mask\r
//\r
*MatchingHandleBuffer = AllocateZeroPool ((*MatchingHandleCount +1)* sizeof (EFI_HANDLE));\r
- ASSERT(*MatchingHandleBuffer != NULL);\r
+ if (*MatchingHandleBuffer == NULL) {\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ } else {\r
+ for (HandleIndex = 0, *MatchingHandleCount = 0\r
+ ; HandleIndex < HandleCount\r
+ ; HandleIndex++\r
+ ) {\r
+ //\r
+ // Fill the allocated buffer with the handles that matched the attributes in Mask\r
+ //\r
+ if ((HandleType[HandleIndex] & Mask) == Mask) {\r
+ (*MatchingHandleBuffer)[(*MatchingHandleCount)++] = HandleBuffer[HandleIndex];\r
+ }\r
+ }\r
\r
- for (HandleIndex = 0,*MatchingHandleCount = 0\r
- ; HandleIndex < HandleCount\r
- ; HandleIndex++\r
- ){\r
//\r
- // Fill the allocated buffer with the handles that matched the attributes in Mask\r
+ // Make the last one NULL\r
//\r
- if ((HandleType[HandleIndex] & Mask) == Mask) {\r
- (*MatchingHandleBuffer)[(*MatchingHandleCount)++] = HandleBuffer[HandleIndex];\r
- }\r
- }\r
+ (*MatchingHandleBuffer)[*MatchingHandleCount] = NULL;\r
\r
- //\r
- // Make the last one NULL\r
- //\r
- (*MatchingHandleBuffer)[*MatchingHandleCount] = NULL;\r
-\r
- Status = EFI_SUCCESS;\r
+ Status = EFI_SUCCESS;\r
+ } // *MatchingHandleBuffer == NULL (ELSE)\r
} // MacthingHandleBuffer == NULL (ELSE)\r
} // *MatchingHandleCount == 0 (ELSE)\r
} // no error on ParseHandleDatabaseByRelationshipWithType\r
FreePool (HandleType);\r
}\r
\r
+ ASSERT ((MatchingHandleBuffer == NULL) ||\r
+ (*MatchingHandleCount == 0 && *MatchingHandleBuffer == NULL) ||\r
+ (*MatchingHandleCount != 0 && *MatchingHandleBuffer != NULL));\r
return Status;\r
}\r
\r
Gets handles for any child controllers of the passed in controller.\r
\r
@param[in] ControllerHandle The handle of the "parent controller"\r
- @param[in] MatchingHandleCount Pointer to the number of handles in\r
+ @param[out] MatchingHandleCount Pointer to the number of handles in\r
MatchingHandleBuffer on return.\r
@param[out] MatchingHandleBuffer Buffer containing handles on a successful\r
return.\r
EFIAPI\r
ParseHandleDatabaseForChildControllers(\r
IN CONST EFI_HANDLE ControllerHandle,\r
- IN UINTN *MatchingHandleCount,\r
+ OUT UINTN *MatchingHandleCount,\r
OUT EFI_HANDLE **MatchingHandleBuffer OPTIONAL\r
)\r
{\r
\r
FreePool (DriverBindingHandleBuffer);\r
\r
+ if (MatchingHandleBuffer == NULL || *MatchingHandleCount == 0) {\r
+ //\r
+ // The caller is not interested in the actual handles, or we've found none.\r
+ //\r
+ FreePool (HandleBufferForReturn);\r
+ HandleBufferForReturn = NULL;\r
+ }\r
+\r
if (MatchingHandleBuffer != NULL) {\r
*MatchingHandleBuffer = HandleBufferForReturn;\r
- } else {\r
- FreePool(HandleBufferForReturn);\r
}\r
\r
+ ASSERT ((MatchingHandleBuffer == NULL) ||\r
+ (*MatchingHandleCount == 0 && *MatchingHandleBuffer == NULL) ||\r
+ (*MatchingHandleCount != 0 && *MatchingHandleBuffer != NULL));\r
+\r
return (EFI_SUCCESS);\r
}\r
\r
@return A pointer to (*DestinationBuffer).\r
**/\r
VOID*\r
-EFIAPI\r
BuffernCatGrow (\r
IN OUT VOID **DestinationBuffer,\r
IN OUT UINTN *DestinationSize,\r
}\r
\r
//\r
- // No handles were found... \r
+ // No handles were found...\r
//\r
if (TotalSize == sizeof(EFI_HANDLE)) {\r
return (NULL);\r
\r
return (HandleList);\r
}\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r