diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c index c2dc4b8fae..f2e1182b24 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c @@ -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; } } diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Devices.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/Devices.c index 49e9e66bdc..005ba4bb5e 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Devices.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Devices.c @@ -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"" + ); } - // - // 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"" - ); - } - - 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); diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Disconnect.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/Disconnect.c index 8a75bff67f..8500516b90 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Disconnect.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Disconnect.c @@ -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; diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c index 922522cc82..ce986456e8 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c @@ -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; } } diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/OpenInfo.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/OpenInfo.c index 14ebf99a85..f0619c56ba 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/OpenInfo.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/OpenInfo.c @@ -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; diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Unload.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/Unload.c index bfdc3d2f98..f1e3645886 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Unload.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Unload.c @@ -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;