diff --git a/ShellPkg/Include/Library/ShellCommandLib.h b/ShellPkg/Include/Library/ShellCommandLib.h index 5c5e241f15..44eccc447c 100644 --- a/ShellPkg/Include/Library/ShellCommandLib.h +++ b/ShellPkg/Include/Library/ShellCommandLib.h @@ -670,6 +670,29 @@ ShellFileHandleEof( 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 { LIST_ENTRY Link; void *Buffer; diff --git a/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c b/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c index ac77111ef9..7fe908cb57 100644 --- a/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c +++ b/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c @@ -30,6 +30,7 @@ STATIC UINTN mProfileListSize; STATIC UINTN mFsMaxCount = 0; STATIC UINTN mBlkMaxCount = 0; STATIC BUFFER_LIST mFileHandleList; +STATIC CHAR16 *mRawCmdLine = NULL; STATIC CONST CHAR8 Hex[] = { '0', @@ -1868,6 +1869,50 @@ ShellFileHandleEof( 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.