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
|
||||
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>
|
||||
This program and the accompanying materials
|
||||
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;
|
||||
SHELL_FILE_HANDLE FileHandle;
|
||||
EFI_HANDLE TheHandle;
|
||||
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *OriginalSimpleTextOut;
|
||||
} SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL;
|
||||
|
||||
/**
|
||||
|
@ -253,7 +255,14 @@ FileBasedSimpleTextOutQueryMode (
|
|||
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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -388,6 +397,7 @@ FileBasedSimpleTextOutOutputString (
|
|||
|
||||
@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] OriginalProtocol The pointer to the original output protocol for pass thru of functions.
|
||||
|
||||
@retval NULL There was insufficient memory available.
|
||||
@return A pointer to the allocated protocol structure;
|
||||
|
@ -396,7 +406,8 @@ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL*
|
|||
EFIAPI
|
||||
CreateSimpleTextOutOnFile(
|
||||
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;
|
||||
|
@ -411,6 +422,7 @@ CreateSimpleTextOutOnFile(
|
|||
return (NULL);
|
||||
}
|
||||
ProtocolToReturn->FileHandle = FileHandleToUse;
|
||||
ProtocolToReturn->OriginalSimpleTextOut = OriginalProtocol;
|
||||
ProtocolToReturn->SimpleTextOut.Reset = FileBasedSimpleTextOutReset;
|
||||
ProtocolToReturn->SimpleTextOut.TestString = FileBasedSimpleTextOutTestString;
|
||||
ProtocolToReturn->SimpleTextOut.QueryMode = FileBasedSimpleTextOutQueryMode;
|
||||
|
@ -425,12 +437,12 @@ CreateSimpleTextOutOnFile(
|
|||
FreePool(ProtocolToReturn);
|
||||
return (NULL);
|
||||
}
|
||||
ProtocolToReturn->SimpleTextOut.Mode->MaxMode = 0;
|
||||
ProtocolToReturn->SimpleTextOut.Mode->Mode = 0;
|
||||
ProtocolToReturn->SimpleTextOut.Mode->Attribute = 0;
|
||||
ProtocolToReturn->SimpleTextOut.Mode->CursorColumn = 0;
|
||||
ProtocolToReturn->SimpleTextOut.Mode->CursorRow = 0;
|
||||
ProtocolToReturn->SimpleTextOut.Mode->CursorVisible = FALSE;
|
||||
ProtocolToReturn->SimpleTextOut.Mode->MaxMode = OriginalProtocol->Mode->MaxMode;
|
||||
ProtocolToReturn->SimpleTextOut.Mode->Mode = OriginalProtocol->Mode->Mode;
|
||||
ProtocolToReturn->SimpleTextOut.Mode->Attribute = OriginalProtocol->Mode->Attribute;
|
||||
ProtocolToReturn->SimpleTextOut.Mode->CursorColumn = OriginalProtocol->Mode->CursorColumn;
|
||||
ProtocolToReturn->SimpleTextOut.Mode->CursorRow = OriginalProtocol->Mode->CursorRow;
|
||||
ProtocolToReturn->SimpleTextOut.Mode->CursorVisible = OriginalProtocol->Mode->CursorVisible;
|
||||
|
||||
Status = gBS->InstallProtocolInterface(
|
||||
&(ProtocolToReturn->TheHandle),
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/** @file
|
||||
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>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
|
@ -52,6 +53,7 @@ CloseSimpleTextInOnFile(
|
|||
|
||||
@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] OriginalProtocol The pointer to the original output protocol for pass thru of functions.
|
||||
|
||||
@retval NULL There was insufficient memory available.
|
||||
@return A pointer to the allocated protocol structure;
|
||||
|
@ -60,7 +62,8 @@ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL*
|
|||
EFIAPI
|
||||
CreateSimpleTextOutOnFile(
|
||||
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,
|
||||
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>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
|
@ -1008,7 +1009,7 @@ UpdateStdInStdOutStdErr(
|
|||
}
|
||||
if (!EFI_ERROR(Status)) {
|
||||
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)) {
|
||||
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);
|
||||
ASSERT(TempHandle != NULL);
|
||||
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);
|
||||
ASSERT(TempHandle != NULL);
|
||||
ShellParameters->StdErr = TempHandle;
|
||||
gST->StdErr = CreateSimpleTextOutOnFile(TempHandle, &gST->StandardErrorHandle);
|
||||
gST->StdErr = CreateSimpleTextOutOnFile(TempHandle, &gST->StandardErrorHandle, gST->StdErr);
|
||||
}
|
||||
|
||||
//
|
||||
|
|
Loading…
Reference in New Issue