summaryrefslogtreecommitdiff
path: root/ShellPkg/Application/Shell/Shell.c
diff options
context:
space:
mode:
authorOlivier Martin <olivier.martin@arm.com>2014-05-13 21:16:42 +0000
committerjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>2014-05-13 21:16:42 +0000
commitcd39fe082c886243b934b1ff4170ab32bbd0db2c (patch)
tree95ad28d768b1c71ac6460019d2075ce10efdf305 /ShellPkg/Application/Shell/Shell.c
parent93e8d03cd178cde473672a29b4f0d7ff4d2ffdbc (diff)
downloadedk2-platforms-cd39fe082c886243b934b1ff4170ab32bbd0db2c.tar.xz
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
Diffstat (limited to 'ShellPkg/Application/Shell/Shell.c')
-rw-r--r--ShellPkg/Application/Shell/Shell.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/ShellPkg/Application/Shell/Shell.c b/ShellPkg/Application/Shell/Shell.c
index 056d66d09e..951d31e82b 100644
--- a/ShellPkg/Application/Shell/Shell.c
+++ b/ShellPkg/Application/Shell/Shell.c
@@ -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;
}
//