ShellPkg: Refactor Split/Pipe based command lines

This moves the initialization for handling command lines with pipe ‘|’ into a separate function.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jaben Carsey <jaben.carsey@intel.com>
Reviewed-by: Erik Bjorge <erik.c.bjorge@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14982 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Jaben Carsey 2013-12-13 18:18:27 +00:00 committed by jcarsey
parent e94784c68d
commit 680db51153
1 changed files with 31 additions and 17 deletions

View File

@ -1588,6 +1588,36 @@ GetOperationType(
return (UNKNOWN_INVALID); return (UNKNOWN_INVALID);
} }
/**
**/
EFI_STATUS
EFIAPI
ProcessNewSplitCommandLine(
IN CONST CHAR16 *CmdLine
)
{
SPLIT_LIST *Split;
EFI_STATUS Status;
Split = NULL;
//
// are we in an existing split???
//
if (!IsListEmpty(&ShellInfoObject.SplitList.Link)) {
Split = (SPLIT_LIST*)GetFirstNode(&ShellInfoObject.SplitList.Link);
}
if (Split == NULL) {
Status = RunSplitCommand(CmdLine, NULL, NULL);
} else {
Status = RunSplitCommand(CmdLine, Split->SplitStdIn, Split->SplitStdOut);
}
if (EFI_ERROR(Status)) {
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SHELL_INVALID_SPLIT), ShellInfoObject.HiiHandle, CmdLine);
}
return (Status);
}
/** /**
Function will process and run a command line. Function will process and run a command line.
@ -1624,7 +1654,6 @@ RunCommand(
UINTN Count; UINTN Count;
UINTN Count2; UINTN Count2;
CHAR16 *CleanOriginal; CHAR16 *CleanOriginal;
SPLIT_LIST *Split;
ASSERT(CmdLine != NULL); ASSERT(CmdLine != NULL);
if (StrLen(CmdLine) == 0) { if (StrLen(CmdLine) == 0) {
@ -1636,7 +1665,6 @@ RunCommand(
DevPath = NULL; DevPath = NULL;
Status = EFI_SUCCESS; Status = EFI_SUCCESS;
CleanOriginal = NULL; CleanOriginal = NULL;
Split = NULL;
CleanOriginal = StrnCatGrow(&CleanOriginal, NULL, CmdLine, 0); CleanOriginal = StrnCatGrow(&CleanOriginal, NULL, CmdLine, 0);
if (CleanOriginal == NULL) { if (CleanOriginal == NULL) {
@ -1672,21 +1700,7 @@ RunCommand(
// We dont do normal processing with a split command line (output from one command input to another) // We dont do normal processing with a split command line (output from one command input to another)
// //
if (ContainsSplit(CleanOriginal)) { if (ContainsSplit(CleanOriginal)) {
// Status = ProcessNewSplitCommandLine(CleanOriginal);
// are we in an existing split???
//
if (!IsListEmpty(&ShellInfoObject.SplitList.Link)) {
Split = (SPLIT_LIST*)GetFirstNode(&ShellInfoObject.SplitList.Link);
}
if (Split == NULL) {
Status = RunSplitCommand(CleanOriginal, NULL, NULL);
} else {
Status = RunSplitCommand(CleanOriginal, Split->SplitStdIn, Split->SplitStdOut);
}
if (EFI_ERROR(Status)) {
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SHELL_INVALID_SPLIT), ShellInfoObject.HiiHandle, CleanOriginal);
}
} else { } else {
// //