Revision: 19520
http://sourceforge.net/p/edk2/code/19520
Author: shenshushi
Date: 2015-12-24 08:06:28 +0000 (Thu, 24 Dec 2015)
Log Message:
-----------
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 <[email protected]>
Reviewed-by: Ruiyu Ni <[email protected]>
Reviewed-by: Jaben Carsey <[email protected]>
Modified Paths:
--------------
trunk/edk2/ShellPkg/Application/Shell/Shell.c
trunk/edk2/ShellPkg/Application/Shell/Shell.inf
trunk/edk2/ShellPkg/ShellPkg.dec
Modified: trunk/edk2/ShellPkg/Application/Shell/Shell.c
===================================================================
--- trunk/edk2/ShellPkg/Application/Shell/Shell.c 2015-12-24 07:01:07 UTC
(rev 19519)
+++ trunk/edk2/ShellPkg/Application/Shell/Shell.c 2015-12-24 08:06:28 UTC
(rev 19520)
@@ -1288,13 +1288,40 @@
)
{
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);
+ }
}
/**
Modified: trunk/edk2/ShellPkg/Application/Shell/Shell.inf
===================================================================
--- trunk/edk2/ShellPkg/Application/Shell/Shell.inf 2015-12-24 07:01:07 UTC
(rev 19519)
+++ trunk/edk2/ShellPkg/Application/Shell/Shell.inf 2015-12-24 08:06:28 UTC
(rev 19520)
@@ -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
Modified: trunk/edk2/ShellPkg/ShellPkg.dec
===================================================================
--- trunk/edk2/ShellPkg/ShellPkg.dec 2015-12-24 07:01:07 UTC (rev 19519)
+++ trunk/edk2/ShellPkg/ShellPkg.dec 2015-12-24 08:06:28 UTC (rev 19520)
@@ -101,6 +101,9 @@
## This determines how many bytes are read out of files at a time for file
operations (type, copy, etc...)
gEfiShellPkgTokenSpaceGuid.PcdShellFileOperationSize|0x1000|UINT32|0x0000000A
+
+ ## This determines the max count of history commands
+
gEfiShellPkgTokenSpaceGuid.PcdShellMaxHistoryCommandCount|0x0020|UINT16|0x00000014
[PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]
## This flag is used to control the protocols produced by the shell
------------------------------------------------------------------------------
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits