)\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
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,\r
IN CONST CHAR16 *CommandLine OPTIONAL,\r
IN CONST CHAR16 **Environment OPTIONAL,\r
+ OUT EFI_STATUS *StartImageStatus OPTIONAL,\r
OUT UINTN *ExitDataSize OPTIONAL,\r
OUT CHAR16 **ExitData OPTIONAL\r
)\r
{\r
EFI_STATUS Status;\r
+ EFI_STATUS StartStatus;\r
EFI_STATUS CleanupStatus;\r
EFI_HANDLE NewHandle;\r
EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;\r
// now start the image, passing up exit data if the caller requested it\r
//\r
if (!EFI_ERROR(Status)) {\r
- Status = gBS->StartImage(\r
+ StartStatus = gBS->StartImage(\r
NewHandle,\r
ExitDataSizePtr,\r
ExitData\r
);\r
+ if (StartImageStatus != NULL) {\r
+ *StartImageStatus = StartStatus;\r
+ }\r
\r
CleanupStatus = gBS->UninstallProtocolInterface(\r
NewHandle,\r
DevPath,\r
Temp,\r
(CONST CHAR16**)Environment,\r
+ StatusCode,\r
&ExitDataSize,\r
&ExitData);\r
\r
}\r
FreePool (ExitData);\r
Status = EFI_SUCCESS;\r
- } else if ((StatusCode != NULL) && !EFI_ERROR(Status)) {\r
- *StatusCode = EFI_SUCCESS;\r
}\r
\r
//\r
EFI_STATUS\r
EFIAPI\r
InternalShellExecuteDevicePath(\r
- IN CONST EFI_HANDLE *ParentImageHandle,\r
+ IN CONST EFI_HANDLE *ParentImageHandle,\r
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,\r
- IN CONST CHAR16 *CommandLine OPTIONAL,\r
- IN CONST CHAR16 **Environment OPTIONAL,\r
+ IN CONST CHAR16 *CommandLine OPTIONAL,\r
+ IN CONST CHAR16 **Environment OPTIONAL,\r
+ OUT EFI_STATUS *StartImageStatus OPTIONAL,\r
OUT UINTN *ExitDataSize OPTIONAL,\r
OUT CHAR16 **ExitData OPTIONAL\r
);\r