mirror of https://github.com/acidanthera/audk.git
ShellPkg: Fixes the shell so output redirection works for the 'mode' command
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@14800 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
85a3fa3ad7
commit
dcf9b428e6
|
@ -1,6 +1,7 @@
|
||||||
/** @file
|
/** @file
|
||||||
Function definitions for shell simple text in and out on top of file handles.
|
Function definitions for shell simple text in and out on top of file handles.
|
||||||
|
|
||||||
|
Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
|
||||||
Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
|
@ -24,6 +25,7 @@ typedef struct {
|
||||||
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL SimpleTextOut;
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL SimpleTextOut;
|
||||||
SHELL_FILE_HANDLE FileHandle;
|
SHELL_FILE_HANDLE FileHandle;
|
||||||
EFI_HANDLE TheHandle;
|
EFI_HANDLE TheHandle;
|
||||||
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *OriginalSimpleTextOut;
|
||||||
} SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL;
|
} SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -253,7 +255,14 @@ FileBasedSimpleTextOutQueryMode (
|
||||||
OUT UINTN *Rows
|
OUT UINTN *Rows
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return (EFI_UNSUPPORTED);
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *PassThruProtocol = ((SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *)This)->OriginalSimpleTextOut;
|
||||||
|
|
||||||
|
// Pass the QueryMode call thru to the original SimpleTextOutProtocol
|
||||||
|
return (PassThruProtocol->QueryMode(
|
||||||
|
PassThruProtocol,
|
||||||
|
ModeNumber,
|
||||||
|
Columns,
|
||||||
|
Rows));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -386,8 +395,9 @@ FileBasedSimpleTextOutOutputString (
|
||||||
Function to create a EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL on top of a
|
Function to create a EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL on top of a
|
||||||
SHELL_FILE_HANDLE to support redirecting output from a file.
|
SHELL_FILE_HANDLE to support redirecting output from a file.
|
||||||
|
|
||||||
@param[in] FileHandleToUse The pointer to the SHELL_FILE_HANDLE to use.
|
@param[in] FileHandleToUse The pointer to the SHELL_FILE_HANDLE to use.
|
||||||
@param[in] HandleLocation The pointer of a location to copy handle with protocol to.
|
@param[in] HandleLocation The pointer of a location to copy handle with protocol to.
|
||||||
|
@param[in] OriginalProtocol The pointer to the original output protocol for pass thru of functions.
|
||||||
|
|
||||||
@retval NULL There was insufficient memory available.
|
@retval NULL There was insufficient memory available.
|
||||||
@return A pointer to the allocated protocol structure;
|
@return A pointer to the allocated protocol structure;
|
||||||
|
@ -395,8 +405,9 @@ FileBasedSimpleTextOutOutputString (
|
||||||
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL*
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL*
|
||||||
EFIAPI
|
EFIAPI
|
||||||
CreateSimpleTextOutOnFile(
|
CreateSimpleTextOutOnFile(
|
||||||
IN SHELL_FILE_HANDLE FileHandleToUse,
|
IN SHELL_FILE_HANDLE FileHandleToUse,
|
||||||
IN EFI_HANDLE *HandleLocation
|
IN EFI_HANDLE *HandleLocation,
|
||||||
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *OriginalProtocol
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ProtocolToReturn;
|
SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ProtocolToReturn;
|
||||||
|
@ -411,6 +422,7 @@ CreateSimpleTextOutOnFile(
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
ProtocolToReturn->FileHandle = FileHandleToUse;
|
ProtocolToReturn->FileHandle = FileHandleToUse;
|
||||||
|
ProtocolToReturn->OriginalSimpleTextOut = OriginalProtocol;
|
||||||
ProtocolToReturn->SimpleTextOut.Reset = FileBasedSimpleTextOutReset;
|
ProtocolToReturn->SimpleTextOut.Reset = FileBasedSimpleTextOutReset;
|
||||||
ProtocolToReturn->SimpleTextOut.TestString = FileBasedSimpleTextOutTestString;
|
ProtocolToReturn->SimpleTextOut.TestString = FileBasedSimpleTextOutTestString;
|
||||||
ProtocolToReturn->SimpleTextOut.QueryMode = FileBasedSimpleTextOutQueryMode;
|
ProtocolToReturn->SimpleTextOut.QueryMode = FileBasedSimpleTextOutQueryMode;
|
||||||
|
@ -425,12 +437,12 @@ CreateSimpleTextOutOnFile(
|
||||||
FreePool(ProtocolToReturn);
|
FreePool(ProtocolToReturn);
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
ProtocolToReturn->SimpleTextOut.Mode->MaxMode = 0;
|
ProtocolToReturn->SimpleTextOut.Mode->MaxMode = OriginalProtocol->Mode->MaxMode;
|
||||||
ProtocolToReturn->SimpleTextOut.Mode->Mode = 0;
|
ProtocolToReturn->SimpleTextOut.Mode->Mode = OriginalProtocol->Mode->Mode;
|
||||||
ProtocolToReturn->SimpleTextOut.Mode->Attribute = 0;
|
ProtocolToReturn->SimpleTextOut.Mode->Attribute = OriginalProtocol->Mode->Attribute;
|
||||||
ProtocolToReturn->SimpleTextOut.Mode->CursorColumn = 0;
|
ProtocolToReturn->SimpleTextOut.Mode->CursorColumn = OriginalProtocol->Mode->CursorColumn;
|
||||||
ProtocolToReturn->SimpleTextOut.Mode->CursorRow = 0;
|
ProtocolToReturn->SimpleTextOut.Mode->CursorRow = OriginalProtocol->Mode->CursorRow;
|
||||||
ProtocolToReturn->SimpleTextOut.Mode->CursorVisible = FALSE;
|
ProtocolToReturn->SimpleTextOut.Mode->CursorVisible = OriginalProtocol->Mode->CursorVisible;
|
||||||
|
|
||||||
Status = gBS->InstallProtocolInterface(
|
Status = gBS->InstallProtocolInterface(
|
||||||
&(ProtocolToReturn->TheHandle),
|
&(ProtocolToReturn->TheHandle),
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/** @file
|
/** @file
|
||||||
Function definitions for shell simple text in and out on top of file handles.
|
Function definitions for shell simple text in and out on top of file handles.
|
||||||
|
|
||||||
|
Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
|
||||||
Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
|
@ -50,8 +51,9 @@ CloseSimpleTextInOnFile(
|
||||||
Function to create a EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL on top of a
|
Function to create a EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL on top of a
|
||||||
SHELL_FILE_HANDLE to support redirecting output from a file.
|
SHELL_FILE_HANDLE to support redirecting output from a file.
|
||||||
|
|
||||||
@param[in] FileHandleToUse The pointer to the SHELL_FILE_HANDLE to use.
|
@param[in] FileHandleToUse The pointer to the SHELL_FILE_HANDLE to use.
|
||||||
@param[in] HandleLocation The pointer of a location to copy handle with protocol to.
|
@param[in] HandleLocation The pointer of a location to copy handle with protocol to.
|
||||||
|
@param[in] OriginalProtocol The pointer to the original output protocol for pass thru of functions.
|
||||||
|
|
||||||
@retval NULL There was insufficient memory available.
|
@retval NULL There was insufficient memory available.
|
||||||
@return A pointer to the allocated protocol structure;
|
@return A pointer to the allocated protocol structure;
|
||||||
|
@ -59,8 +61,9 @@ CloseSimpleTextInOnFile(
|
||||||
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL*
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL*
|
||||||
EFIAPI
|
EFIAPI
|
||||||
CreateSimpleTextOutOnFile(
|
CreateSimpleTextOutOnFile(
|
||||||
IN SHELL_FILE_HANDLE FileHandleToUse,
|
IN SHELL_FILE_HANDLE FileHandleToUse,
|
||||||
IN EFI_HANDLE *HandleLocation
|
IN EFI_HANDLE *HandleLocation,
|
||||||
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *OriginalProtocol
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
Member functions of EFI_SHELL_PARAMETERS_PROTOCOL and functions for creation,
|
Member functions of EFI_SHELL_PARAMETERS_PROTOCOL and functions for creation,
|
||||||
manipulation, and initialization of EFI_SHELL_PARAMETERS_PROTOCOL.
|
manipulation, and initialization of EFI_SHELL_PARAMETERS_PROTOCOL.
|
||||||
|
|
||||||
|
Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
|
||||||
Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
|
@ -1008,7 +1009,7 @@ UpdateStdInStdOutStdErr(
|
||||||
}
|
}
|
||||||
if (!EFI_ERROR(Status)) {
|
if (!EFI_ERROR(Status)) {
|
||||||
ShellParameters->StdErr = TempHandle;
|
ShellParameters->StdErr = TempHandle;
|
||||||
gST->StdErr = CreateSimpleTextOutOnFile(TempHandle, &gST->StandardErrorHandle);
|
gST->StdErr = CreateSimpleTextOutOnFile(TempHandle, &gST->StandardErrorHandle, gST->StdErr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1051,7 +1052,7 @@ UpdateStdInStdOutStdErr(
|
||||||
}
|
}
|
||||||
if (!EFI_ERROR(Status)) {
|
if (!EFI_ERROR(Status)) {
|
||||||
ShellParameters->StdOut = TempHandle;
|
ShellParameters->StdOut = TempHandle;
|
||||||
gST->ConOut = CreateSimpleTextOutOnFile(TempHandle, &gST->ConsoleOutHandle);
|
gST->ConOut = CreateSimpleTextOutOnFile(TempHandle, &gST->ConsoleOutHandle, gST->ConOut);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1069,7 +1070,7 @@ UpdateStdInStdOutStdErr(
|
||||||
TempHandle = CreateFileInterfaceEnv(StdOutVarName);
|
TempHandle = CreateFileInterfaceEnv(StdOutVarName);
|
||||||
ASSERT(TempHandle != NULL);
|
ASSERT(TempHandle != NULL);
|
||||||
ShellParameters->StdOut = TempHandle;
|
ShellParameters->StdOut = TempHandle;
|
||||||
gST->ConOut = CreateSimpleTextOutOnFile(TempHandle, &gST->ConsoleOutHandle);
|
gST->ConOut = CreateSimpleTextOutOnFile(TempHandle, &gST->ConsoleOutHandle, gST->ConOut);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -1085,7 +1086,7 @@ UpdateStdInStdOutStdErr(
|
||||||
TempHandle = CreateFileInterfaceEnv(StdErrVarName);
|
TempHandle = CreateFileInterfaceEnv(StdErrVarName);
|
||||||
ASSERT(TempHandle != NULL);
|
ASSERT(TempHandle != NULL);
|
||||||
ShellParameters->StdErr = TempHandle;
|
ShellParameters->StdErr = TempHandle;
|
||||||
gST->StdErr = CreateSimpleTextOutOnFile(TempHandle, &gST->StandardErrorHandle);
|
gST->StdErr = CreateSimpleTextOutOnFile(TempHandle, &gST->StandardErrorHandle, gST->StdErr);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in New Issue