ShellPkg: Add Shell[Get|Set]RawCmdLine to ShellCommandLib

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
This commit is contained in:
Ruiyu Ni 2016-07-18 17:46:59 +08:00
parent c0bcd3433f
commit 0fcf8d4df8
2 changed files with 68 additions and 0 deletions

View File

@ -670,6 +670,29 @@ ShellFileHandleEof(
IN SHELL_FILE_HANDLE Handle IN SHELL_FILE_HANDLE Handle
); );
/**
Function to get the original CmdLine string for current command.
@return A pointer to the buffer of the original command string.
It's the caller's responsibility to free the buffer.
**/
CHAR16*
EFIAPI
ShellGetRawCmdLine (
VOID
);
/**
Function to store the orgignal command string into mOriginalCmdLine.
@param[in] CmdLine the command line string to store.
**/
VOID
EFIAPI
ShellSetRawCmdLine (
IN CONST CHAR16 *CmdLine
);
typedef struct { typedef struct {
LIST_ENTRY Link; LIST_ENTRY Link;
void *Buffer; void *Buffer;

View File

@ -30,6 +30,7 @@ STATIC UINTN mProfileListSize;
STATIC UINTN mFsMaxCount = 0; STATIC UINTN mFsMaxCount = 0;
STATIC UINTN mBlkMaxCount = 0; STATIC UINTN mBlkMaxCount = 0;
STATIC BUFFER_LIST mFileHandleList; STATIC BUFFER_LIST mFileHandleList;
STATIC CHAR16 *mRawCmdLine = NULL;
STATIC CONST CHAR8 Hex[] = { STATIC CONST CHAR8 Hex[] = {
'0', '0',
@ -1868,6 +1869,50 @@ ShellFileHandleEof(
return (RetVal); return (RetVal);
} }
/**
Function to get the original CmdLine string for current command.
@return A pointer to the buffer of the original command string.
It's the caller's responsibility to free the buffer.
**/
CHAR16*
EFIAPI
ShellGetRawCmdLine (
VOID
)
{
if (mRawCmdLine == NULL) {
return NULL;
} else {
return AllocateCopyPool(StrSize(mRawCmdLine), mRawCmdLine);
}
}
/**
Function to store the raw command string.
The alias and variables have been replaced and spaces are trimmed.
@param[in] CmdLine the command line string to store.
**/
VOID
EFIAPI
ShellSetRawCmdLine (
IN CONST CHAR16 *CmdLine
)
{
SHELL_FREE_NON_NULL(mRawCmdLine);
if (CmdLine != NULL) {
//
// The spaces in the beginning and end are trimmed.
//
ASSERT (*CmdLine != L' ');
ASSERT (CmdLine[StrLen (CmdLine) - 1] != L' ');
mRawCmdLine = AllocateCopyPool (StrSize(CmdLine), CmdLine);
}
}
/** /**
Frees any BUFFER_LIST defined type. Frees any BUFFER_LIST defined type.