summaryrefslogtreecommitdiff
path: root/ShellPkg/Application
diff options
context:
space:
mode:
authorQiu Shumin <shumin.qiu@intel.com>2015-12-24 08:06:28 +0000
committershenshushi <shenshushi@Edk2>2015-12-24 08:06:28 +0000
commita4f138a412b95b6db8f3109fbce744ecf186ff50 (patch)
tree6cfd4ef76a63c38bf36b423c25d08d420e2eb42c /ShellPkg/Application
parentfe709fe4b7fbadf5a4fb29380fb27ce78a6d4a9b (diff)
downloadedk2-platforms-a4f138a412b95b6db8f3109fbce744ecf186ff50.tar.xz
ShellPkg: Refine the code logic of 'command history'.
Add the PCD to PcdShellMaxHistoryCommandCount indicate the max count of history commands. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Qiu Shumin <shumin.qiu@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Jaben Carsey <jaben.carsey@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19520 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ShellPkg/Application')
-rw-r--r--ShellPkg/Application/Shell/Shell.c29
-rw-r--r--ShellPkg/Application/Shell/Shell.inf25
2 files changed, 41 insertions, 13 deletions
diff --git a/ShellPkg/Application/Shell/Shell.c b/ShellPkg/Application/Shell/Shell.c
index 36063227a2..97b8c8d6fb 100644
--- a/ShellPkg/Application/Shell/Shell.c
+++ b/ShellPkg/Application/Shell/Shell.c
@@ -1288,13 +1288,40 @@ AddLineToCommandHistory(
)
{
BUFFER_LIST *Node;
+ BUFFER_LIST *Walker;
+ UINT16 MaxHistoryCmdCount;
+ UINT16 Count;
+
+ Count = 0;
+ MaxHistoryCmdCount = PcdGet16(PcdShellMaxHistoryCommandCount);
+
+ if (MaxHistoryCmdCount == 0) {
+ return ;
+ }
+
Node = AllocateZeroPool(sizeof(BUFFER_LIST));
ASSERT(Node != NULL);
Node->Buffer = AllocateCopyPool(StrSize(Buffer), Buffer);
ASSERT(Node->Buffer != NULL);
- InsertTailList(&ShellInfoObject.ViewingSettings.CommandHistory.Link, &Node->Link);
+ for ( Walker = (BUFFER_LIST*)GetFirstNode(&ShellInfoObject.ViewingSettings.CommandHistory.Link)
+ ; !IsNull(&ShellInfoObject.ViewingSettings.CommandHistory.Link, &Walker->Link)
+ ; Walker = (BUFFER_LIST*)GetNextNode(&ShellInfoObject.ViewingSettings.CommandHistory.Link, &Walker->Link)
+ ){
+ Count++;
+ }
+ if (Count < MaxHistoryCmdCount){
+ InsertTailList(&ShellInfoObject.ViewingSettings.CommandHistory.Link, &Node->Link);
+ } else {
+ Walker = (BUFFER_LIST*)GetFirstNode(&ShellInfoObject.ViewingSettings.CommandHistory.Link);
+ RemoveEntryList(&Walker->Link);
+ if (Walker->Buffer != NULL) {
+ FreePool(Walker->Buffer);
+ }
+ FreePool(Walker);
+ InsertTailList(&ShellInfoObject.ViewingSettings.CommandHistory.Link, &Node->Link);
+ }
}
/**
diff --git a/ShellPkg/Application/Shell/Shell.inf b/ShellPkg/Application/Shell/Shell.inf
index 09aecf717b..253bfdbb22 100644
--- a/ShellPkg/Application/Shell/Shell.inf
+++ b/ShellPkg/Application/Shell/Shell.inf
@@ -95,18 +95,19 @@
gEfiDevicePathProtocolGuid ## CONSUMES
[Pcd]
- gEfiShellPkgTokenSpaceGuid.PcdShellSupportLevel ## CONSUMES
- gEfiShellPkgTokenSpaceGuid.PcdShellSupportOldProtocols ## CONSUMES
- gEfiShellPkgTokenSpaceGuid.PcdShellRequireHiiPlatform ## CONSUMES
- gEfiShellPkgTokenSpaceGuid.PcdShellSupportFrameworkHii ## CONSUMES
- gEfiShellPkgTokenSpaceGuid.PcdShellPageBreakDefault ## CONSUMES
- gEfiShellPkgTokenSpaceGuid.PcdShellLibAutoInitialize ## CONSUMES
- gEfiShellPkgTokenSpaceGuid.PcdShellInsertModeDefault ## CONSUMES
- gEfiShellPkgTokenSpaceGuid.PcdShellScreenLogCount ## CONSUMES
- gEfiShellPkgTokenSpaceGuid.PcdShellMapNameLength ## CONSUMES
- gEfiShellPkgTokenSpaceGuid.PcdShellPrintBufferSize ## CONSUMES
- gEfiShellPkgTokenSpaceGuid.PcdShellForceConsole ## CONSUMES
- gEfiShellPkgTokenSpaceGuid.PcdShellSupplier ## CONSUMES
+ gEfiShellPkgTokenSpaceGuid.PcdShellSupportLevel ## CONSUMES
+ gEfiShellPkgTokenSpaceGuid.PcdShellSupportOldProtocols ## CONSUMES
+ gEfiShellPkgTokenSpaceGuid.PcdShellRequireHiiPlatform ## CONSUMES
+ gEfiShellPkgTokenSpaceGuid.PcdShellSupportFrameworkHii ## CONSUMES
+ gEfiShellPkgTokenSpaceGuid.PcdShellPageBreakDefault ## CONSUMES
+ gEfiShellPkgTokenSpaceGuid.PcdShellLibAutoInitialize ## CONSUMES
+ gEfiShellPkgTokenSpaceGuid.PcdShellInsertModeDefault ## CONSUMES
+ gEfiShellPkgTokenSpaceGuid.PcdShellScreenLogCount ## CONSUMES
+ gEfiShellPkgTokenSpaceGuid.PcdShellMapNameLength ## CONSUMES
+ gEfiShellPkgTokenSpaceGuid.PcdShellPrintBufferSize ## CONSUMES
+ gEfiShellPkgTokenSpaceGuid.PcdShellForceConsole ## CONSUMES
+ gEfiShellPkgTokenSpaceGuid.PcdShellSupplier ## CONSUMES
+ gEfiShellPkgTokenSpaceGuid.PcdShellMaxHistoryCommandCount ## CONSUMES
[BuildOptions.AARCH64]
# The tiny code model used by AARCH64 only supports binaries of up to 1 MB in