ShellPkg: Properly set lasterror environment variable
- Set lasterror value based on platform width - Use “lasterror” rather than “Lasterror” for variable name to match Shell Specification - Set lasterror value when a binary or script file is not found Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chris Phillips <chrisp@hp.com> Reviewed-by: Jaben Carsey <Jaben.Carsey@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14816 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -1593,10 +1593,15 @@ RunCommand(
|
|||||||
if (!EFI_ERROR(Status)) {
|
if (!EFI_ERROR(Status)) {
|
||||||
Status = ShellCommandRunCommandHandler(ShellInfoObject.NewShellParametersProtocol->Argv[0], &ShellStatus, &LastError);
|
Status = ShellCommandRunCommandHandler(ShellInfoObject.NewShellParametersProtocol->Argv[0], &ShellStatus, &LastError);
|
||||||
ASSERT_EFI_ERROR(Status);
|
ASSERT_EFI_ERROR(Status);
|
||||||
UnicodeSPrint(LeString, sizeof(LeString), L"0x%08Lx", ShellStatus);
|
|
||||||
DEBUG_CODE(InternalEfiShellSetEnv(L"DebugLasterror", LeString, TRUE););
|
if (sizeof(EFI_STATUS) == sizeof(UINT64)) {
|
||||||
|
UnicodeSPrint(LeString, sizeof(LeString), L"0x%Lx", ShellStatus);
|
||||||
|
} else {
|
||||||
|
UnicodeSPrint(LeString, sizeof(LeString), L"0x%x", ShellStatus);
|
||||||
|
}
|
||||||
|
DEBUG_CODE(InternalEfiShellSetEnv(L"debuglasterror", LeString, TRUE););
|
||||||
if (LastError) {
|
if (LastError) {
|
||||||
InternalEfiShellSetEnv(L"Lasterror", LeString, TRUE);
|
InternalEfiShellSetEnv(L"lasterror", LeString, TRUE);
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// Pass thru the exitcode from the app.
|
// Pass thru the exitcode from the app.
|
||||||
@ -1622,6 +1627,14 @@ RunCommand(
|
|||||||
}
|
}
|
||||||
if (CommandWithPath == NULL || ShellIsDirectory(CommandWithPath) == EFI_SUCCESS) {
|
if (CommandWithPath == NULL || ShellIsDirectory(CommandWithPath) == EFI_SUCCESS) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SHELL_NOT_FOUND), ShellInfoObject.HiiHandle, ShellInfoObject.NewShellParametersProtocol->Argv[0]);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SHELL_NOT_FOUND), ShellInfoObject.HiiHandle, ShellInfoObject.NewShellParametersProtocol->Argv[0]);
|
||||||
|
|
||||||
|
if (sizeof(EFI_STATUS) == sizeof(UINT64)) {
|
||||||
|
UnicodeSPrint(LeString, sizeof(LeString), L"0x%Lx", EFI_NOT_FOUND);
|
||||||
|
} else {
|
||||||
|
UnicodeSPrint(LeString, sizeof(LeString), L"0x%x", EFI_NOT_FOUND);
|
||||||
|
}
|
||||||
|
DEBUG_CODE(InternalEfiShellSetEnv(L"debuglasterror", LeString, TRUE););
|
||||||
|
InternalEfiShellSetEnv(L"lasterror", LeString, TRUE);
|
||||||
} else {
|
} else {
|
||||||
//
|
//
|
||||||
// Check if it's a NSH (script) file.
|
// Check if it's a NSH (script) file.
|
||||||
@ -1642,11 +1655,15 @@ RunCommand(
|
|||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Updatet last error status.
|
// Update last error status.
|
||||||
//
|
//
|
||||||
UnicodeSPrint(LeString, sizeof(LeString), L"0x%08Lx", StatusCode);
|
if (sizeof(EFI_STATUS) == sizeof(UINT64)) {
|
||||||
DEBUG_CODE(InternalEfiShellSetEnv(L"DebugLasterror", LeString, TRUE););
|
UnicodeSPrint(LeString, sizeof(LeString), L"0x%Lx", StatusCode);
|
||||||
InternalEfiShellSetEnv(L"Lasterror", LeString, TRUE);
|
} else {
|
||||||
|
UnicodeSPrint(LeString, sizeof(LeString), L"0x%x", StatusCode);
|
||||||
|
}
|
||||||
|
DEBUG_CODE(InternalEfiShellSetEnv(L"debuglasterror", LeString, TRUE););
|
||||||
|
InternalEfiShellSetEnv(L"lasterror", LeString, TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1952,9 +1969,12 @@ RunScriptFileHandle (
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ShellCommandGetScriptExit()) {
|
if (ShellCommandGetScriptExit()) {
|
||||||
|
//
|
||||||
|
// ShellCommandGetExitCode() always returns a UINT64
|
||||||
|
//
|
||||||
UnicodeSPrint(LeString, sizeof(LeString), L"0x%Lx", ShellCommandGetExitCode());
|
UnicodeSPrint(LeString, sizeof(LeString), L"0x%Lx", ShellCommandGetExitCode());
|
||||||
DEBUG_CODE(InternalEfiShellSetEnv(L"DebugLasterror", LeString, TRUE););
|
DEBUG_CODE(InternalEfiShellSetEnv(L"debuglasterror", LeString, TRUE););
|
||||||
InternalEfiShellSetEnv(L"Lasterror", LeString, TRUE);
|
InternalEfiShellSetEnv(L"lasterror", LeString, TRUE);
|
||||||
|
|
||||||
ShellCommandRegisterExit(FALSE, 0);
|
ShellCommandRegisterExit(FALSE, 0);
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
|
Reference in New Issue
Block a user