ShellPkg: Do not mix status when executing a command

The function InternalShellExecuteDevicePath() did not differentiate an error occuring during the preparation of an image and an error occurring during its execution.

A use case of the issue was when a EFI application was called in a EFI Shell script. If the EFI application was returning an error then the NSH script stopped its execution. While the EFI Shell specification says the script should continue its execution (see 4.2 Error Handling).

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>
Reviewed-by: Jaben Carsey <Jaben.Carsey@intel.com>


git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15523 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Olivier Martin
2014-05-13 21:16:42 +00:00
committed by jcarsey
parent 93e8d03cd1
commit cd39fe082c
3 changed files with 14 additions and 7 deletions

View File

@ -2231,6 +2231,7 @@ RunCommandOrFile(
)
{
EFI_STATUS Status;
EFI_STATUS StartStatus;
CHAR16 *CommandWithPath;
EFI_DEVICE_PATH_PROTOCOL *DevPath;
SHELL_STATUS CalleeExitStatus;
@ -2308,6 +2309,7 @@ RunCommandOrFile(
DevPath,
CmdLine,
NULL,
&StartStatus,
NULL,
NULL
);
@ -2317,7 +2319,7 @@ RunCommandOrFile(
if(EFI_ERROR (Status)) {
CalleeExitStatus = (SHELL_STATUS) (Status & (~MAX_BIT));
} else {
CalleeExitStatus = SHELL_SUCCESS;
CalleeExitStatus = (SHELL_STATUS) StartStatus;
}
//