// Reset page break back to default.\r
//\r
ShellInfoObject.PageBreakEnabled = PcdGetBool(PcdShellPageBreakDefault);\r
+ ASSERT (ShellInfoObject.ConsoleInfo != NULL);\r
ShellInfoObject.ConsoleInfo->Enabled = TRUE;\r
ShellInfoObject.ConsoleInfo->RowCounter = 0;\r
\r
ShellInfoObject.ShellInitSettings.BitUnion.Bits.Exit = FALSE;\r
ShellInfoObject.ShellInitSettings.Delay = 5;\r
\r
- // Start LoopVar at 1 to ignore Argv[0] which is the name of this binary\r
- // (probably "Shell.efi")\r
- for (LoopVar = 1 ; LoopVar < gEfiShellParametersProtocol->Argc ; LoopVar++) {\r
+ //\r
+ // Start LoopVar at 0 to parse only optional arguments at Argv[0]\r
+ // and parse other parameters from Argv[1]. This is for use case that\r
+ // UEFI Shell boot option is created, and OptionalData is provided\r
+ // that starts with shell command-line options.\r
+ //\r
+ for (LoopVar = 0 ; LoopVar < gEfiShellParametersProtocol->Argc ; LoopVar++) {\r
CurrentArg = gEfiShellParametersProtocol->Argv[LoopVar];\r
if (UnicodeCollation->StriColl (\r
UnicodeCollation,\r
);\r
return EFI_INVALID_PARAMETER;\r
} else {\r
+ //\r
+ // First argument should be Shell.efi image name\r
+ //\r
+ if (LoopVar == 0) {\r
+ continue;\r
+ }\r
+\r
ShellInfoObject.ShellInitSettings.FileName = AllocateZeroPool(StrSize(CurrentArg));\r
if (ShellInfoObject.ShellInitSettings.FileName == NULL) {\r
return (EFI_OUT_OF_RESOURCES);\r
}\r
ASSERT(FirstPercent < FirstQuote);\r
if (SecondPercent < FirstQuote) {\r
- //\r
- // We need to remove from FirstPercent to SecondPercent\r
- //\r
- CopyMem(FirstPercent, SecondPercent + 1, StrSize(SecondPercent + 1));\r
+ FirstPercent[0] = L'\"';\r
+ SecondPercent[0] = L'\"';\r
\r
//\r
- // dont need to update the locator. both % characters are gone.\r
+ // We need to remove from FirstPercent to SecondPercent\r
//\r
+ CopyMem(FirstPercent + 1, SecondPercent, StrSize(SecondPercent));\r
+ CurrentLocator = FirstPercent + 2;\r
continue;\r
}\r
ASSERT(FirstQuote < SecondPercent);\r
if (EFI_ERROR(Status)) {\r
return (Status);\r
}\r
+ ASSERT (*CmdLine != NULL);\r
\r
TrimSpaces(CmdLine);\r
\r
)\r
{\r
EFI_STATUS Status;\r
+ EFI_STATUS StartStatus;\r
CHAR16 *CommandWithPath;\r
EFI_DEVICE_PATH_PROTOCOL *DevPath;\r
SHELL_STATUS CalleeExitStatus;\r
DevPath,\r
CmdLine,\r
NULL,\r
+ &StartStatus,\r
NULL,\r
NULL\r
);\r
if(EFI_ERROR (Status)) {\r
CalleeExitStatus = (SHELL_STATUS) (Status & (~MAX_BIT));\r
} else {\r
- CalleeExitStatus = SHELL_SUCCESS;\r
+ CalleeExitStatus = (SHELL_STATUS) StartStatus;\r
}\r
\r
//\r