} else {\r
\r
GuidStr = GetStringNameFromGuid (&InfoTypesBuffer[GuidIndex], NULL);\r
+ if (GuidStr == NULL) {\r
+ TempRetVal = CatSPrint (RetVal, TempStr, L"UnknownInfoType");\r
+ SHELL_FREE_NON_NULL (RetVal);\r
+ RetVal = TempRetVal;\r
\r
- if (GuidStr != NULL) {\r
- if (StrCmp(GuidStr, L"UnknownDevice") == 0) {\r
- TempRetVal = CatSPrint (RetVal, TempStr, L"UnknownInfoType");\r
- SHELL_FREE_NON_NULL (RetVal);\r
- RetVal = TempRetVal;\r
-\r
- SHELL_FREE_NON_NULL (TempStr);\r
- SHELL_FREE_NON_NULL(GuidStr);\r
- //\r
- // So that we never have to pass this UnknownInfoType to the parsing function "GetInformation" service of AIP\r
- //\r
- continue;\r
- } else {\r
- TempRetVal = CatSPrint (RetVal, TempStr, GuidStr);\r
- SHELL_FREE_NON_NULL (RetVal);\r
- RetVal = TempRetVal;\r
- SHELL_FREE_NON_NULL(GuidStr);\r
- }\r
+ SHELL_FREE_NON_NULL (TempStr);\r
+ SHELL_FREE_NON_NULL(GuidStr);\r
+ //\r
+ // So that we never have to pass this UnknownInfoType to the parsing function "GetInformation" service of AIP\r
+ //\r
+ continue;\r
+ } else {\r
+ TempRetVal = CatSPrint (RetVal, TempStr, GuidStr);\r
+ SHELL_FREE_NON_NULL (RetVal);\r
+ RetVal = TempRetVal;\r
+ SHELL_FREE_NON_NULL(GuidStr);\r
}\r
}\r
\r
{STRING_TOKEN(STR_WINNT_THUNK), (EFI_GUID*)&WinNtThunkProtocolGuid, NULL},\r
{STRING_TOKEN(STR_WINNT_DRIVER_IO), (EFI_GUID*)&WinNtIoProtocolGuid, NULL},\r
{STRING_TOKEN(STR_WINNT_SERIAL_PORT), (EFI_GUID*)&WinNtSerialPortGuid, NULL},\r
- {STRING_TOKEN(STR_UNKNOWN_DEVICE), NULL, NULL},\r
+ {0, NULL, NULL},\r
};\r
\r
STATIC CONST GUID_INFO_BLOCK mGuidStringList[] = {\r
//\r
// terminator\r
//\r
- {STRING_TOKEN(STR_UNKNOWN_DEVICE), NULL, NULL},\r
+ {0, NULL, NULL},\r
};\r
\r
/**\r
HandleParsingHiiInit();\r
\r
Id = InternalShellGetNodeFromGuid(Guid);\r
- return (HiiGetString(mHandleParsingHiiHandle, Id==NULL?STRING_TOKEN(STR_UNKNOWN_DEVICE):Id->StringId, Lang));\r
+ if (Id == NULL) {\r
+ return NULL;\r
+ }\r
+ return HiiGetString (mHandleParsingHiiHandle, Id->StringId, Lang);\r
}\r
\r
/**\r
// Verify that LinkWalker->TheHandle is valid handle\r
//\r
Status = gBS->ProtocolsPerHandle(ListWalker->TheHandle, &ProtocolBuffer, &ProtocolCount);\r
- if (EFI_ERROR (Status)) {\r
+ if (!EFI_ERROR (Status)) {\r
+ FreePool (ProtocolBuffer);\r
+ } else {\r
//\r
// TheHandle is not valid, so do not add to handle list\r
//\r
\r
return (HandleList);\r
}\r
+\r
+/**\r
+ Return all supported GUIDs.\r
+\r
+ @param[out] Guids The buffer to return all supported GUIDs.\r
+ @param[in, out] Count On input, the count of GUIDs the buffer can hold,\r
+ On output, the count of GUIDs to return.\r
+\r
+ @retval EFI_INVALID_PARAMETER Count is NULL.\r
+ @retval EFI_BUFFER_TOO_SMALL Buffer is not enough to hold all GUIDs.\r
+ @retval EFI_SUCCESS GUIDs are returned successfully.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+GetAllMappingGuids (\r
+ OUT EFI_GUID *Guids,\r
+ IN OUT UINTN *Count\r
+ )\r
+{\r
+ UINTN GuidCount;\r
+ UINTN NtGuidCount;\r
+ UINTN Index;\r
+\r
+ if (Count == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ NtGuidCount = 0;\r
+ if (PcdGetBool (PcdShellIncludeNtGuids)) {\r
+ NtGuidCount = ARRAY_SIZE (mGuidStringListNT) - 1;\r
+ }\r
+ GuidCount = ARRAY_SIZE (mGuidStringList) - 1;\r
+\r
+ if (*Count < NtGuidCount + GuidCount + mGuidListCount) {\r
+ *Count = NtGuidCount + GuidCount + mGuidListCount;\r
+ return EFI_BUFFER_TOO_SMALL;\r
+ }\r
+\r
+ for (Index = 0; Index < NtGuidCount; Index++) {\r
+ CopyGuid (&Guids[Index], mGuidStringListNT[Index].GuidId);\r
+ }\r
+\r
+ for (Index = 0; Index < GuidCount; Index++) {\r
+ CopyGuid (&Guids[NtGuidCount + Index], mGuidStringList[Index].GuidId);\r
+ }\r
+\r
+ for (Index = 0; Index < mGuidListCount; Index++) {\r
+ CopyGuid (&Guids[NtGuidCount + GuidCount + Index], mGuidList[Index].GuidId);\r
+ }\r
+\r
+ return EFI_SUCCESS;\r
+}\r