CHAR16 *MediaType;\r
CHAR16 *DevPathString;\r
CHAR16 *TempSpot;\r
+ CHAR16 *Alias;\r
UINTN TempLen;\r
BOOLEAN Removable;\r
CONST CHAR16 *TempSpot2;\r
\r
+ Alias = NULL;\r
+ TempSpot2 = NULL;\r
+ CurrentName = NULL;\r
DevPath = DevicePathFromHandle(Handle);\r
DevPathCopy = DevPath;\r
MapList = gEfiShellProtocol->GetMapFromDevicePath(&DevPathCopy);\r
return EFI_NOT_FOUND;\r
}\r
\r
- CurrentName = NULL;\r
- CurrentName = StrnCatGrow(&CurrentName, 0, MapList, 0);\r
- if (CurrentName == NULL) {\r
- return (EFI_OUT_OF_RESOURCES);\r
- }\r
- TempSpot = StrStr(CurrentName, L";");\r
- if (TempSpot != NULL) {\r
- *TempSpot = CHAR_NULL;\r
+ if (Normal) {\r
+ //\r
+ // Allocate a name\r
+ //\r
+ CurrentName = NULL;\r
+ CurrentName = StrnCatGrow(&CurrentName, 0, MapList, 0);\r
+ if (CurrentName == NULL) {\r
+ return (EFI_OUT_OF_RESOURCES);\r
+ }\r
+\r
+ //\r
+ // Chop off the other names that become "Alias(s)"\r
+ // leaving just the normal name\r
+ //\r
+ TempSpot = StrStr(CurrentName, L";");\r
+ if (TempSpot != NULL) {\r
+ *TempSpot = CHAR_NULL;\r
+ }\r
+ } else if (Consist) {\r
+ CurrentName = NULL;\r
+\r
+ //\r
+ // Skip the first name. This is the standard name.\r
+ //\r
+ TempSpot = StrStr(MapList, L";");\r
+ if (TempSpot != NULL) {\r
+ TempSpot++;\r
+ }\r
+ SearchList(TempSpot, L"HD*", &CurrentName, TRUE, FALSE, L";");\r
+ if (CurrentName == NULL) {\r
+ SearchList(TempSpot, L"CD*", &CurrentName, TRUE, FALSE, L";");\r
+ }\r
+ if (CurrentName == NULL) {\r
+ SearchList(TempSpot, L"FP*", &CurrentName, TRUE, FALSE, L";");\r
+ }\r
+ if (CurrentName == NULL) {\r
+ SearchList(TempSpot, L"F*", &CurrentName, TRUE, FALSE, L";");\r
+ }\r
+ if (CurrentName == NULL) {\r
+ //\r
+ // We didnt find anything, so just the first one in the list...\r
+ //\r
+ CurrentName = StrnCatGrow(&CurrentName, 0, MapList, 0);\r
+ if (CurrentName == NULL) {\r
+ return (EFI_OUT_OF_RESOURCES);\r
+ }\r
+ TempSpot = StrStr(CurrentName, L";");\r
+ if (TempSpot != NULL) {\r
+ *TempSpot = CHAR_NULL;\r
+ }\r
+ } else {\r
+ Alias = StrnCatGrow(&Alias, 0, MapList, 0);\r
+ TempSpot = StrStr(Alias, CurrentName);\r
+ if (TempSpot != NULL) {\r
+ TempSpot2 = StrStr(TempSpot, L";");\r
+ if (TempSpot2 != NULL) {\r
+ TempSpot2++; // Move past ";" from CurrentName\r
+ CopyMem(TempSpot, TempSpot2, StrSize(TempSpot2));\r
+ } else {\r
+ *TempSpot = CHAR_NULL;\r
+ }\r
+ }\r
+ if (Alias[StrLen(Alias)-1] == L';') {\r
+ Alias[StrLen(Alias)-1] = CHAR_NULL;\r
+ }\r
+ }\r
+ } else {\r
+ CurrentName = NULL;\r
}\r
DevPathString = ConvertDevicePathToText(DevPath, TRUE, FALSE);\r
if (!SFO) {\r
STRING_TOKEN (STR_MAP_ENTRY),\r
gShellLevel2HiiHandle,\r
CurrentName,\r
- TempLen < StrLen(MapList)?MapList + TempLen+1:L"",\r
+ Alias!=NULL?Alias:(TempLen < StrLen(MapList)?MapList + TempLen+1:L""),\r
DevPathString\r
);\r
if (Verbose) {\r
TempSpot2\r
);\r
}\r
- FreePool(MediaType);\r
+ SHELL_FREE_NON_NULL(MediaType);\r
}\r
} else {\r
TempLen = StrLen(CurrentName);\r
gShellLevel2HiiHandle,\r
CurrentName,\r
DevPathString,\r
- TempLen < StrLen(MapList)?MapList + TempLen+1:L""\r
+ Consist?L"":(TempLen < StrLen(MapList)?MapList + TempLen+1:L"")\r
);\r
}\r
- FreePool(DevPathString);\r
- FreePool(CurrentName);\r
+ SHELL_FREE_NON_NULL(DevPathString);\r
+ SHELL_FREE_NON_NULL(CurrentName);\r
+ SHELL_FREE_NON_NULL(Alias);\r
return EFI_SUCCESS;\r
}\r
\r