Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ruiyu Ni <[email protected]>
Cc: Jaben Carsey <[email protected]>
---
 ShellPkg/Include/Library/ShellCommandLib.h         | 23 +++++++++++
 .../UefiShellCommandLib/UefiShellCommandLib.c      | 45 ++++++++++++++++++++++
 2 files changed, 68 insertions(+)

diff --git a/ShellPkg/Include/Library/ShellCommandLib.h 
b/ShellPkg/Include/Library/ShellCommandLib.h
index 5c5e241..44eccc4 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 6283f28..82f3bed 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',
@@ -1849,6 +1850,50 @@ ShellFileHandleEof(
 }
 
 /**
+  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.
 
   @param[in] List     The BUFFER_LIST object to free.
-- 
2.9.0.windows.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to