ShellPkg/UefiShellDriver1: Lower indentation level in MainCmdXXX()

This patch aims to help breaking down the long function present in
the ShellPkg and reduce complexity/nested code and conditions.

Lower the indentation level in the newly created MainCmdXXX()
functions.

No functional change should be induced by this patch.

Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
This commit is contained in:
Pierre Gondois 2026-04-08 14:18:49 +02:00 committed by mergify[bot]
parent 4de99ebb92
commit becbdb4e27
6 changed files with 366 additions and 359 deletions

View file

@ -505,18 +505,19 @@ MainCmdConnect (
// if more than 2 'value' parameters (plus the name one) or either -r or -c with any value parameters we have too many parameters
//
Count = (gInReconnect ? 0x4 : 0x3);
if ( (ShellCommandLineGetCount (Package) > Count)
|| (ShellCommandLineGetFlag (Package, L"-c") && (ShellCommandLineGetCount (Package) > 1))
|| (ShellCommandLineGetFlag (Package, L"-r") && (ShellCommandLineGetCount (Package) > 2))
|| (ShellCommandLineGetFlag (Package, L"-r") && ShellCommandLineGetFlag (Package, L"-c"))
)
if ((ShellCommandLineGetCount (Package) > Count) ||
(ShellCommandLineGetFlag (Package, L"-c") && (ShellCommandLineGetCount (Package) > 1)) ||
(ShellCommandLineGetFlag (Package, L"-r") && (ShellCommandLineGetCount (Package) > 2)) ||
(ShellCommandLineGetFlag (Package, L"-r") && ShellCommandLineGetFlag (Package, L"-c")))
{
//
// error for too many parameters
//
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle, L"connect");
ShellStatus = SHELL_INVALID_PARAMETER;
} else if (ShellCommandLineGetFlag (Package, L"-c")) {
return SHELL_INVALID_PARAMETER;
}
if (ShellCommandLineGetFlag (Package, L"-c")) {
//
// do the conin and conout from EFI variables
// if the first fails dont 'loose' the error
@ -525,55 +526,59 @@ MainCmdConnect (
if (EFI_ERROR (Status)) {
ShellStatus = SHELL_DEVICE_ERROR;
}
return ShellStatus;
}
//
// 0, 1, or 2 specific handles and possibly recursive
//
Param1 = ShellCommandLineGetRawValue (Package, 1);
Param2 = ShellCommandLineGetRawValue (Package, 2);
Count = ShellCommandLineGetCount (Package);
if (Param1 != NULL) {
Status = ShellConvertStringToUint64 (Param1, &Intermediate, TRUE, FALSE);
if (EFI_ERROR (Status)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"connect", Param1);
return SHELL_INVALID_PARAMETER;
}
Handle1 = ConvertHandleIndexToHandle ((UINTN)Intermediate);
} else {
//
// 0, 1, or 2 specific handles and possibly recursive
//
Param1 = ShellCommandLineGetRawValue (Package, 1);
Param2 = ShellCommandLineGetRawValue (Package, 2);
Count = ShellCommandLineGetCount (Package);
Handle1 = NULL;
}
if (Param1 != NULL) {
Status = ShellConvertStringToUint64 (Param1, &Intermediate, TRUE, FALSE);
if (EFI_ERROR (Status)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"connect", Param1);
return SHELL_INVALID_PARAMETER;
}
Handle1 = ConvertHandleIndexToHandle ((UINTN)Intermediate);
if (Param2 != NULL) {
Status = ShellConvertStringToUint64 (Param2, &Intermediate, TRUE, FALSE);
if (!EFI_ERROR (Status)) {
Handle2 = ConvertHandleIndexToHandle ((UINTN)Intermediate);
} else {
Handle1 = NULL;
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"connect", Param2);
ShellStatus = SHELL_INVALID_PARAMETER;
}
} else {
Handle2 = NULL;
}
if (Param2 != NULL) {
Status = ShellConvertStringToUint64 (Param2, &Intermediate, TRUE, FALSE);
if (!EFI_ERROR (Status)) {
Handle2 = ConvertHandleIndexToHandle ((UINTN)Intermediate);
} else {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"connect", Param2);
ShellStatus = SHELL_INVALID_PARAMETER;
}
} else {
Handle2 = NULL;
}
if (ShellStatus != SHELL_SUCCESS) {
return ShellStatus;
}
if (ShellStatus == SHELL_SUCCESS) {
if ((Param1 != NULL) && (Handle1 == NULL)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"connect", Param1);
ShellStatus = SHELL_INVALID_PARAMETER;
} else if ((Param2 != NULL) && (Handle2 == NULL)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"connect", Param2);
ShellStatus = SHELL_INVALID_PARAMETER;
} else if ((Handle2 != NULL) && (Handle1 != NULL) && EFI_ERROR (gBS->OpenProtocol (Handle2, &gEfiDriverBindingProtocolGuid, NULL, gImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"connect", Param2);
ShellStatus = SHELL_INVALID_PARAMETER;
} else {
Status = ConvertAndConnectControllers (Handle1, Handle2, ShellCommandLineGetFlag (Package, L"-r"), (BOOLEAN)(Count != 0));
if (EFI_ERROR (Status)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_CONNECT_NONE), gShellDriver1HiiHandle);
ShellStatus = SHELL_DEVICE_ERROR;
}
}
if ((Param1 != NULL) && (Handle1 == NULL)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"connect", Param1);
ShellStatus = SHELL_INVALID_PARAMETER;
} else if ((Param2 != NULL) && (Handle2 == NULL)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"connect", Param2);
ShellStatus = SHELL_INVALID_PARAMETER;
} else if ((Handle2 != NULL) && (Handle1 != NULL) && EFI_ERROR (gBS->OpenProtocol (Handle2, &gEfiDriverBindingProtocolGuid, NULL, gImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"connect", Param2);
ShellStatus = SHELL_INVALID_PARAMETER;
} else {
Status = ConvertAndConnectControllers (Handle1, Handle2, ShellCommandLineGetFlag (Package, L"-r"), (BOOLEAN)(Count != 0));
if (EFI_ERROR (Status)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_CONNECT_NONE), gShellDriver1HiiHandle);
ShellStatus = SHELL_DEVICE_ERROR;
}
}

View file

@ -155,87 +155,87 @@ MainCmdDevices (
// error for too many parameters
//
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle, L"devices");
ShellStatus = SHELL_INVALID_PARAMETER;
return SHELL_INVALID_PARAMETER;
}
//
// get the language if necessary
//
Lang = ShellCommandLineGetValue (Package, L"-l");
if (Lang != NULL) {
Language = AllocateZeroPool (StrSize (Lang));
if (Language == NULL) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_OUT_MEM), gShellDriver1HiiHandle, L"devices");
return (SHELL_OUT_OF_RESOURCES);
}
AsciiSPrint (Language, StrSize (Lang), "%S", Lang);
} else if (!ShellCommandLineGetFlag (Package, L"-l")) {
ASSERT (Language == NULL);
// Language = AllocateZeroPool(10);
// AsciiSPrint(Language, 10, "en-us");
} else {
//
// get the language if necessary
//
Lang = ShellCommandLineGetValue (Package, L"-l");
if (Lang != NULL) {
Language = AllocateZeroPool (StrSize (Lang));
if (Language == NULL) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_OUT_MEM), gShellDriver1HiiHandle, L"devices");
return (SHELL_OUT_OF_RESOURCES);
}
ASSERT (Language == NULL);
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"devices", L"-l");
return (SHELL_INVALID_PARAMETER);
}
AsciiSPrint (Language, StrSize (Lang), "%S", Lang);
} else if (!ShellCommandLineGetFlag (Package, L"-l")) {
ASSERT (Language == NULL);
// Language = AllocateZeroPool(10);
// AsciiSPrint(Language, 10, "en-us");
} else {
ASSERT (Language == NULL);
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"devices", L"-l");
return (SHELL_INVALID_PARAMETER);
//
// Print Header
//
if (ShellCommandLineGetFlag (Package, L"-sfo")) {
ShellPrintHiiEx (-1, -1, Language, STRING_TOKEN (STR_GEN_SFO_HEADER), gShellDriver1HiiHandle, L"devices");
SfoFlag = TRUE;
} else {
ShellPrintHiiEx (-1, -1, Language, STRING_TOKEN (STR_DEVICES_HEADER_LINES), gShellDriver1HiiHandle);
}
//
// loop through each handle
//
HandleList = GetHandleListByProtocol (NULL);
ASSERT (HandleList != NULL);
for (HandleListWalker = HandleList
; HandleListWalker != NULL && *HandleListWalker != NULL /*&& !EFI_ERROR(Status)*/
; HandleListWalker++
)
{
//
// get all the info on each handle
//
Name = NULL;
Status = GetDeviceHandleInfo (*HandleListWalker, &Type, &Cfg, &Diag, &Parents, &Devices, &Children, &Name, Language);
if ((Name != NULL) && ((Parents != 0) || (Devices != 0) || (Children != 0))) {
ShellPrintHiiEx (
-1,
-1,
Language,
SfoFlag ? STRING_TOKEN (STR_DEVICES_ITEM_LINE_SFO) : STRING_TOKEN (STR_DEVICES_ITEM_LINE),
gShellDriver1HiiHandle,
ConvertHandleToHandleIndex (*HandleListWalker),
Type,
Cfg ? (SfoFlag ? L'Y' : L'X') : (SfoFlag ? L'N' : L'-'),
Diag ? (SfoFlag ? L'Y' : L'X') : (SfoFlag ? L'N' : L'-'),
Parents,
Devices,
Children,
Name != NULL ? Name : L"<UNKNOWN>"
);
}
//
// Print Header
//
if (ShellCommandLineGetFlag (Package, L"-sfo")) {
ShellPrintHiiEx (-1, -1, Language, STRING_TOKEN (STR_GEN_SFO_HEADER), gShellDriver1HiiHandle, L"devices");
SfoFlag = TRUE;
} else {
ShellPrintHiiEx (-1, -1, Language, STRING_TOKEN (STR_DEVICES_HEADER_LINES), gShellDriver1HiiHandle);
if (Name != NULL) {
FreePool (Name);
}
//
// loop through each handle
//
HandleList = GetHandleListByProtocol (NULL);
ASSERT (HandleList != NULL);
for (HandleListWalker = HandleList
; HandleListWalker != NULL && *HandleListWalker != NULL /*&& !EFI_ERROR(Status)*/
; HandleListWalker++
)
{
//
// get all the info on each handle
//
Name = NULL;
Status = GetDeviceHandleInfo (*HandleListWalker, &Type, &Cfg, &Diag, &Parents, &Devices, &Children, &Name, Language);
if ((Name != NULL) && ((Parents != 0) || (Devices != 0) || (Children != 0))) {
ShellPrintHiiEx (
-1,
-1,
Language,
SfoFlag ? STRING_TOKEN (STR_DEVICES_ITEM_LINE_SFO) : STRING_TOKEN (STR_DEVICES_ITEM_LINE),
gShellDriver1HiiHandle,
ConvertHandleToHandleIndex (*HandleListWalker),
Type,
Cfg ? (SfoFlag ? L'Y' : L'X') : (SfoFlag ? L'N' : L'-'),
Diag ? (SfoFlag ? L'Y' : L'X') : (SfoFlag ? L'N' : L'-'),
Parents,
Devices,
Children,
Name != NULL ? Name : L"<UNKNOWN>"
);
}
if (Name != NULL) {
FreePool (Name);
}
if (ShellGetExecutionBreakFlag ()) {
ShellStatus = SHELL_ABORTED;
break;
}
if (ShellGetExecutionBreakFlag ()) {
ShellStatus = SHELL_ABORTED;
break;
}
}
if (HandleList != NULL) {
FreePool (HandleList);
}
if (HandleList != NULL) {
FreePool (HandleList);
}
SHELL_FREE_NON_NULL (Language);

View file

@ -102,10 +102,10 @@ MainCmdDisconnect (
if (ShellCommandLineGetFlag (Package, L"-r")) {
if (ShellCommandLineGetCount (Package) > 1) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle, L"disconnect");
ShellStatus = SHELL_INVALID_PARAMETER;
return SHELL_INVALID_PARAMETER;
} else if (ShellCommandLineGetCount (Package) < 1) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDriver1HiiHandle, L"disconnect");
ShellStatus = SHELL_INVALID_PARAMETER;
return SHELL_INVALID_PARAMETER;
} else {
Status = DisconnectAll ();
//
@ -120,71 +120,76 @@ MainCmdDisconnect (
ShellConnectFromDevPaths (L"ConOut");
}
}
// TODO: note: DisconnectAll can only return success
if (EFI_ERROR (Status)) {
return SHELL_NOT_FOUND;
}
return SHELL_SUCCESS;
} else if (ShellCommandLineGetFlag (Package, L"-nc")) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDriver1HiiHandle, L"disconnect");
ShellStatus = SHELL_INVALID_PARAMETER;
} else {
if (ShellCommandLineGetCount (Package) > 4) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle, L"disconnect");
ShellStatus = SHELL_INVALID_PARAMETER;
} else if (ShellCommandLineGetCount (Package) < 2) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDriver1HiiHandle, L"disconnect");
ShellStatus = SHELL_INVALID_PARAMETER;
} else {
//
// must have between 1 and 3 handles passed in ...
//
Param1 = ShellCommandLineGetRawValue (Package, 1);
Param2 = ShellCommandLineGetRawValue (Package, 2);
Param3 = ShellCommandLineGetRawValue (Package, 3);
if (Param1 && !EFI_ERROR (ShellConvertStringToUint64 (Param1, &Intermediate1, TRUE, FALSE))) {
Handle1 = ConvertHandleIndexToHandle ((UINTN)Intermediate1);
} else {
Handle1 = NULL;
}
if (Param2 && !EFI_ERROR (ShellConvertStringToUint64 (Param2, &Intermediate2, TRUE, FALSE))) {
Handle2 = ConvertHandleIndexToHandle ((UINTN)Intermediate2);
} else {
Handle2 = NULL;
}
if (Param3 && !EFI_ERROR (ShellConvertStringToUint64 (Param3, &Intermediate3, TRUE, FALSE))) {
Handle3 = ConvertHandleIndexToHandle ((UINTN)Intermediate3);
} else {
Handle3 = NULL;
}
if ((Param1 != NULL) && (Handle1 == NULL)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"disconnect", Param1);
ShellStatus = SHELL_INVALID_PARAMETER;
} else if ((Param2 != NULL) && (Handle2 == NULL)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"disconnect", Param2);
ShellStatus = SHELL_INVALID_PARAMETER;
} else if ((Param3 != NULL) && (Handle3 == NULL)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"disconnect", Param3);
ShellStatus = SHELL_INVALID_PARAMETER;
} else if ((Handle2 != NULL) && EFI_ERROR (gBS->OpenProtocol (Handle2, &gEfiDriverBindingProtocolGuid, NULL, gImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {
ASSERT (Param2 != NULL);
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_HANDLE_NOT), gShellDriver1HiiHandle, L"disconnect", ShellStrToUintn (Param2), L"driver handle");
ShellStatus = SHELL_INVALID_PARAMETER;
} else {
ASSERT (Param1 != NULL);
Status = gBS->DisconnectController (Handle1, Handle2, Handle3);
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_3P_RESULT), gShellDriver1HiiHandle, L"Disconnect", (UINTN)Intermediate1, (UINTN)Intermediate2, (UINTN)Intermediate3, Status);
}
}
return SHELL_INVALID_PARAMETER;
}
if (ShellStatus == SHELL_SUCCESS) {
if (Status == EFI_SECURITY_VIOLATION) {
ShellStatus = SHELL_SECURITY_VIOLATION;
} else if (Status == EFI_INVALID_PARAMETER) {
ShellStatus = SHELL_INVALID_PARAMETER;
} else if (EFI_ERROR (Status)) {
ShellStatus = SHELL_NOT_FOUND;
}
if (ShellCommandLineGetCount (Package) > 4) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle, L"disconnect");
return SHELL_INVALID_PARAMETER;
} else if (ShellCommandLineGetCount (Package) < 2) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDriver1HiiHandle, L"disconnect");
return SHELL_INVALID_PARAMETER;
}
//
// must have between 1 and 3 handles passed in ...
//
Param1 = ShellCommandLineGetRawValue (Package, 1);
Param2 = ShellCommandLineGetRawValue (Package, 2);
Param3 = ShellCommandLineGetRawValue (Package, 3);
if (Param1 && !EFI_ERROR (ShellConvertStringToUint64 (Param1, &Intermediate1, TRUE, FALSE))) {
Handle1 = ConvertHandleIndexToHandle ((UINTN)Intermediate1);
} else {
Handle1 = NULL;
}
if (Param2 && !EFI_ERROR (ShellConvertStringToUint64 (Param2, &Intermediate2, TRUE, FALSE))) {
Handle2 = ConvertHandleIndexToHandle ((UINTN)Intermediate2);
} else {
Handle2 = NULL;
}
if (Param3 && !EFI_ERROR (ShellConvertStringToUint64 (Param3, &Intermediate3, TRUE, FALSE))) {
Handle3 = ConvertHandleIndexToHandle ((UINTN)Intermediate3);
} else {
Handle3 = NULL;
}
if ((Param1 != NULL) && (Handle1 == NULL)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"disconnect", Param1);
return SHELL_INVALID_PARAMETER;
} else if ((Param2 != NULL) && (Handle2 == NULL)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"disconnect", Param2);
return SHELL_INVALID_PARAMETER;
} else if ((Param3 != NULL) && (Handle3 == NULL)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"disconnect", Param3);
return SHELL_INVALID_PARAMETER;
} else if ((Handle2 != NULL) && EFI_ERROR (gBS->OpenProtocol (Handle2, &gEfiDriverBindingProtocolGuid, NULL, gImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {
ASSERT (Param2 != NULL);
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_HANDLE_NOT), gShellDriver1HiiHandle, L"disconnect", ShellStrToUintn (Param2), L"driver handle");
return SHELL_INVALID_PARAMETER;
}
ASSERT (Param1 != NULL);
Status = gBS->DisconnectController (Handle1, Handle2, Handle3);
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_3P_RESULT), gShellDriver1HiiHandle, L"Disconnect", (UINTN)Intermediate1, (UINTN)Intermediate2, (UINTN)Intermediate3, Status);
if (Status == EFI_SECURITY_VIOLATION) {
ShellStatus = SHELL_SECURITY_VIOLATION;
} else if (Status == EFI_INVALID_PARAMETER) {
ShellStatus = SHELL_INVALID_PARAMETER;
} else if (EFI_ERROR (Status)) {
ShellStatus = SHELL_NOT_FOUND;
}
return ShellStatus;

View file

@ -294,129 +294,129 @@ MainCmdDrivers (
if (ShellCommandLineGetCount (Package) > 1) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle, L"drivers");
ShellStatus = SHELL_INVALID_PARAMETER;
} else {
if (ShellCommandLineGetFlag (Package, L"-l")) {
Lang = ShellCommandLineGetValue (Package, L"-l");
if (Lang != NULL) {
Language = AllocateZeroPool (StrSize (Lang));
if (Language == NULL) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_OUT_MEM), gShellDriver1HiiHandle, L"drivers");
return (SHELL_OUT_OF_RESOURCES);
}
return SHELL_INVALID_PARAMETER;
}
AsciiSPrint (Language, StrSize (Lang), "%S", Lang);
} else {
ASSERT (Language == NULL);
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"drivers", L"-l");
return (SHELL_INVALID_PARAMETER);
if (ShellCommandLineGetFlag (Package, L"-l")) {
Lang = ShellCommandLineGetValue (Package, L"-l");
if (Lang != NULL) {
Language = AllocateZeroPool (StrSize (Lang));
if (Language == NULL) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_OUT_MEM), gShellDriver1HiiHandle, L"drivers");
return (SHELL_OUT_OF_RESOURCES);
}
AsciiSPrint (Language, StrSize (Lang), "%S", Lang);
} else {
ASSERT (Language == NULL);
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"drivers", L"-l");
return (SHELL_INVALID_PARAMETER);
}
}
if (ShellCommandLineGetFlag (Package, L"-sfo")) {
SfoFlag = TRUE;
FormatString = HiiGetString (gShellDriver1HiiHandle, STRING_TOKEN (STR_DRIVERS_ITEM_LINE_SFO), Language);
//
// print the SFO header
//
ShellPrintHiiEx (
-1,
-1,
Language,
STRING_TOKEN (STR_GEN_SFO_HEADER),
gShellDriver1HiiHandle,
L"drivers"
);
} else {
FormatString = HiiGetString (gShellDriver1HiiHandle, STRING_TOKEN (STR_DRIVERS_ITEM_LINE), Language);
//
// print the header row
//
ShellPrintHiiEx (
-1,
-1,
Language,
STRING_TOKEN (STR_DRIVERS_HEADER_LINES),
gShellDriver1HiiHandle
);
}
if (FormatString == NULL) {
// Assume the string is present because it is hard-coded and report out of memory
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_OUT_MEM), gShellDriver1HiiHandle, L"drivers");
return (SHELL_OUT_OF_RESOURCES);
}
HandleList = GetHandleListByProtocol (&gEfiDriverBindingProtocolGuid);
for (HandleWalker = HandleList; HandleWalker != NULL && *HandleWalker != NULL; HandleWalker++) {
ChildCount = 0;
DeviceCount = 0;
Status = ParseHandleDatabaseForChildDevices (*HandleWalker, &ChildCount, NULL);
Status = PARSE_HANDLE_DATABASE_DEVICES (*HandleWalker, &DeviceCount, NULL);
Temp2 = GetDevicePathTextForHandle (*HandleWalker);
DriverVersion = ReturnDriverVersion (*HandleWalker);
DriverConfig = ReturnDriverConfig (*HandleWalker);
DriverDiag = ReturnDriverDiag (*HandleWalker);
FullDriverName = GetStringNameFromHandle (*HandleWalker, Language);
ImageName = GetImageNameFromHandle (*HandleWalker);
UnicodeValueToStringS (ChildCountStr, sizeof (ChildCountStr), 0, ChildCount, 0);
UnicodeValueToStringS (DeviceCountStr, sizeof (DeviceCountStr), 0, DeviceCount, 0);
TruncatedDriverName = NULL;
if (!SfoFlag && (FullDriverName != NULL)) {
TruncatedDriverName = AllocateZeroPool ((MAX_LEN_DRIVER_NAME + 1) * sizeof (CHAR16));
if (TruncatedDriverName == NULL) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_OUT_MEM), gShellDriver1HiiHandle, L"drivers");
return (SHELL_OUT_OF_RESOURCES);
}
StrnCpyS (TruncatedDriverName, MAX_LEN_DRIVER_NAME + 1, FullDriverName, MAX_LEN_DRIVER_NAME);
}
if (ShellCommandLineGetFlag (Package, L"-sfo")) {
SfoFlag = TRUE;
FormatString = HiiGetString (gShellDriver1HiiHandle, STRING_TOKEN (STR_DRIVERS_ITEM_LINE_SFO), Language);
//
// print the SFO header
//
ShellPrintHiiEx (
-1,
-1,
Language,
STRING_TOKEN (STR_GEN_SFO_HEADER),
gShellDriver1HiiHandle,
L"drivers"
if (!SfoFlag) {
ShellPrintDefaultEx (
FormatString,
ConvertHandleToHandleIndex (*HandleWalker),
DriverVersion,
ChildCount > 0 ? L'B' : (DeviceCount > 0 ? L'D' : L'?'),
DriverConfig ? L'X' : L'-',
DriverDiag ? L'X' : L'-',
DeviceCount > 0 ? DeviceCountStr : L"-",
ChildCount > 0 ? ChildCountStr : L"-",
TruncatedDriverName,
ImageName == NULL ? L"" : ImageName
);
} else {
FormatString = HiiGetString (gShellDriver1HiiHandle, STRING_TOKEN (STR_DRIVERS_ITEM_LINE), Language);
//
// print the header row
//
ShellPrintHiiEx (
-1,
-1,
Language,
STRING_TOKEN (STR_DRIVERS_HEADER_LINES),
gShellDriver1HiiHandle
ShellPrintDefaultEx (
FormatString,
ConvertHandleToHandleIndex (*HandleWalker),
DriverVersion,
ChildCount > 0 ? L'B' : (DeviceCount > 0 ? L'D' : L'?'),
DriverConfig ? L'Y' : L'N',
DriverDiag ? L'Y' : L'N',
DeviceCount,
ChildCount,
FullDriverName,
Temp2 == NULL ? L"" : Temp2
);
}
if (FormatString == NULL) {
// Assume the string is present because it is hard-coded and report out of memory
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_OUT_MEM), gShellDriver1HiiHandle, L"drivers");
return (SHELL_OUT_OF_RESOURCES);
if (TruncatedDriverName != NULL) {
FreePool (TruncatedDriverName);
}
HandleList = GetHandleListByProtocol (&gEfiDriverBindingProtocolGuid);
for (HandleWalker = HandleList; HandleWalker != NULL && *HandleWalker != NULL; HandleWalker++) {
ChildCount = 0;
DeviceCount = 0;
Status = ParseHandleDatabaseForChildDevices (*HandleWalker, &ChildCount, NULL);
Status = PARSE_HANDLE_DATABASE_DEVICES (*HandleWalker, &DeviceCount, NULL);
Temp2 = GetDevicePathTextForHandle (*HandleWalker);
DriverVersion = ReturnDriverVersion (*HandleWalker);
DriverConfig = ReturnDriverConfig (*HandleWalker);
DriverDiag = ReturnDriverDiag (*HandleWalker);
FullDriverName = GetStringNameFromHandle (*HandleWalker, Language);
ImageName = GetImageNameFromHandle (*HandleWalker);
if (Temp2 != NULL) {
FreePool (Temp2);
}
UnicodeValueToStringS (ChildCountStr, sizeof (ChildCountStr), 0, ChildCount, 0);
UnicodeValueToStringS (DeviceCountStr, sizeof (DeviceCountStr), 0, DeviceCount, 0);
TruncatedDriverName = NULL;
if (!SfoFlag && (FullDriverName != NULL)) {
TruncatedDriverName = AllocateZeroPool ((MAX_LEN_DRIVER_NAME + 1) * sizeof (CHAR16));
if (TruncatedDriverName == NULL) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_OUT_MEM), gShellDriver1HiiHandle, L"drivers");
return (SHELL_OUT_OF_RESOURCES);
}
if (ImageName != NULL) {
FreePool (ImageName);
}
StrnCpyS (TruncatedDriverName, MAX_LEN_DRIVER_NAME + 1, FullDriverName, MAX_LEN_DRIVER_NAME);
}
if (!SfoFlag) {
ShellPrintDefaultEx (
FormatString,
ConvertHandleToHandleIndex (*HandleWalker),
DriverVersion,
ChildCount > 0 ? L'B' : (DeviceCount > 0 ? L'D' : L'?'),
DriverConfig ? L'X' : L'-',
DriverDiag ? L'X' : L'-',
DeviceCount > 0 ? DeviceCountStr : L"-",
ChildCount > 0 ? ChildCountStr : L"-",
TruncatedDriverName,
ImageName == NULL ? L"" : ImageName
);
} else {
ShellPrintDefaultEx (
FormatString,
ConvertHandleToHandleIndex (*HandleWalker),
DriverVersion,
ChildCount > 0 ? L'B' : (DeviceCount > 0 ? L'D' : L'?'),
DriverConfig ? L'Y' : L'N',
DriverDiag ? L'Y' : L'N',
DeviceCount,
ChildCount,
FullDriverName,
Temp2 == NULL ? L"" : Temp2
);
}
if (TruncatedDriverName != NULL) {
FreePool (TruncatedDriverName);
}
if (Temp2 != NULL) {
FreePool (Temp2);
}
if (ImageName != NULL) {
FreePool (ImageName);
}
if (ShellGetExecutionBreakFlag ()) {
ShellStatus = SHELL_ABORTED;
break;
}
if (ShellGetExecutionBreakFlag ()) {
ShellStatus = SHELL_ABORTED;
break;
}
}

View file

@ -168,36 +168,35 @@ MainCmdOpenInfo (
// error for too many parameters
//
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle, L"openinfo");
ShellStatus = SHELL_INVALID_PARAMETER;
return SHELL_INVALID_PARAMETER;
} else if (ShellCommandLineGetCount (Package) == 0) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDriver1HiiHandle, L"openinfo");
ShellStatus = SHELL_INVALID_PARAMETER;
} else {
Param1 = ShellCommandLineGetRawValue (Package, 1);
if (Param1 != NULL) {
Status = ShellConvertStringToUint64 (Param1, &Intermediate, TRUE, FALSE);
}
return SHELL_INVALID_PARAMETER;
}
if (EFI_ERROR (Status) || (Param1 == NULL) || (ConvertHandleIndexToHandle ((UINTN)Intermediate) == NULL)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"openinfo", Param1);
ShellStatus = SHELL_INVALID_PARAMETER;
} else {
TheHandle = ConvertHandleIndexToHandle ((UINTN)Intermediate);
if (TheHandle == NULL) {
ASSERT (TheHandle != NULL);
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"openinfo", Param1);
return SHELL_INVALID_PARAMETER;
}
Param1 = ShellCommandLineGetRawValue (Package, 1);
if (Param1 != NULL) {
Status = ShellConvertStringToUint64 (Param1, &Intermediate, TRUE, FALSE);
}
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_OPENINFO_HEADER_LINE), gShellDriver1HiiHandle, (UINTN)Intermediate, TheHandle);
if (EFI_ERROR (Status) || (Param1 == NULL) || (ConvertHandleIndexToHandle ((UINTN)Intermediate) == NULL)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"openinfo", Param1);
return SHELL_INVALID_PARAMETER;
}
Status = TraverseHandleDatabase (TheHandle);
if (!EFI_ERROR (Status)) {
} else {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"openinfo", Param1);
ShellStatus = SHELL_NOT_FOUND;
}
}
TheHandle = ConvertHandleIndexToHandle ((UINTN)Intermediate);
if (TheHandle == NULL) {
ASSERT (TheHandle != NULL);
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"openinfo", Param1);
return SHELL_INVALID_PARAMETER;
}
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_OPENINFO_HEADER_LINE), gShellDriver1HiiHandle, (UINTN)Intermediate, TheHandle);
Status = TraverseHandleDatabase (TheHandle);
if (EFI_ERROR (Status)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"openinfo", Param1);
return SHELL_NOT_FOUND;
}
return ShellStatus;

View file

@ -71,48 +71,46 @@ MainCmdUnload (
// error for too many parameters
//
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle, L"unload");
ShellStatus = SHELL_INVALID_PARAMETER;
return SHELL_INVALID_PARAMETER;
} else if (ShellCommandLineGetCount (Package) < 2) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDriver1HiiHandle, L"unload");
ShellStatus = SHELL_INVALID_PARAMETER;
} else {
Param1 = ShellCommandLineGetRawValue (Package, 1);
if (Param1 != NULL) {
Status = ShellConvertStringToUint64 (Param1, &Value, TRUE, FALSE);
TheHandle = ConvertHandleIndexToHandle ((UINTN)Value);
}
if (EFI_ERROR (Status) || (Param1 == NULL) || (TheHandle == NULL)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"unload", Param1);
ShellStatus = SHELL_INVALID_PARAMETER;
} else {
ASSERT (TheHandle != NULL);
if (ShellCommandLineGetFlag (Package, L"-v") || ShellCommandLineGetFlag (Package, L"-verbose")) {
DumpLoadedImageProtocolInfo (TheHandle);
}
if (!ShellCommandLineGetFlag (Package, L"-n")) {
Status = ShellPrintHiiDefaultEx (STRING_TOKEN (STR_UNLOAD_CONF), gShellDriver1HiiHandle, (UINTN)TheHandle);
Status = ShellPromptForResponse (ShellPromptResponseTypeYesNo, NULL, (VOID **)&Resp);
}
if (ShellCommandLineGetFlag (Package, L"-n") || ((Resp != NULL) && (*Resp == ShellPromptResponseYes))) {
Status = gBS->UnloadImage (TheHandle);
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_HANDLE_RESULT), gShellDriver1HiiHandle, L"Unload", (UINTN)TheHandle, Status);
}
SHELL_FREE_NON_NULL (Resp);
}
return SHELL_INVALID_PARAMETER;
}
if (ShellStatus == SHELL_SUCCESS) {
if (Status == EFI_SECURITY_VIOLATION) {
ShellStatus = SHELL_SECURITY_VIOLATION;
} else if (Status == EFI_INVALID_PARAMETER) {
ShellStatus = SHELL_INVALID_PARAMETER;
} else if (EFI_ERROR (Status)) {
ShellStatus = SHELL_NOT_FOUND;
}
Param1 = ShellCommandLineGetRawValue (Package, 1);
if (Param1 != NULL) {
Status = ShellConvertStringToUint64 (Param1, &Value, TRUE, FALSE);
TheHandle = ConvertHandleIndexToHandle ((UINTN)Value);
}
if (EFI_ERROR (Status) || (Param1 == NULL) || (TheHandle == NULL)) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"unload", Param1);
return SHELL_INVALID_PARAMETER;
}
ASSERT (TheHandle != NULL);
if (ShellCommandLineGetFlag (Package, L"-v") || ShellCommandLineGetFlag (Package, L"-verbose")) {
DumpLoadedImageProtocolInfo (TheHandle);
}
if (!ShellCommandLineGetFlag (Package, L"-n")) {
Status = ShellPrintHiiDefaultEx (STRING_TOKEN (STR_UNLOAD_CONF), gShellDriver1HiiHandle, (UINTN)TheHandle);
Status = ShellPromptForResponse (ShellPromptResponseTypeYesNo, NULL, (VOID **)&Resp);
}
if (ShellCommandLineGetFlag (Package, L"-n") || ((Resp != NULL) && (*Resp == ShellPromptResponseYes))) {
Status = gBS->UnloadImage (TheHandle);
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_HANDLE_RESULT), gShellDriver1HiiHandle, L"Unload", (UINTN)TheHandle, Status);
}
SHELL_FREE_NON_NULL (Resp);
if (Status == EFI_SECURITY_VIOLATION) {
ShellStatus = SHELL_SECURITY_VIOLATION;
} else if (Status == EFI_INVALID_PARAMETER) {
ShellStatus = SHELL_INVALID_PARAMETER;
} else if (EFI_ERROR (Status)) {
ShellStatus = SHELL_NOT_FOUND;
}
return ShellStatus;