mirror of
https://github.com/tianocore/edk2
synced 2026-08-27 00:23:19 -04:00
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:
parent
4de99ebb92
commit
becbdb4e27
6 changed files with 366 additions and 359 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue