Add the PCD to PcdShellMaxHistoryCommandCount indicate the max count of history commands.
Cc: Jaben Carsey <[email protected]> Cc: Ruiyu Ni <[email protected]> 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]> --- ShellPkg/Application/Shell/Shell.c | 24 +++++++++++++++++++++++- ShellPkg/Application/Shell/Shell.inf | 25 +++++++++++++------------ ShellPkg/ShellPkg.dec | 3 +++ 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/ShellPkg/Application/Shell/Shell.c b/ShellPkg/Application/Shell/Shell.c index 3606322..41c8a03 100644 --- a/ShellPkg/Application/Shell/Shell.c +++ b/ShellPkg/Application/Shell/Shell.c @@ -1288,13 +1288,35 @@ AddLineToCommandHistory( ) { BUFFER_LIST *Node; + BUFFER_LIST *Walker; + UINT16 MaxHistoryCmdCount; + UINT16 Count; + + Count = 0; + MaxHistoryCmdCount = PcdGet16(PcdShellMaxHistoryCommandCount); 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 09aecf7..253bfdb 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 diff --git a/ShellPkg/ShellPkg.dec b/ShellPkg/ShellPkg.dec index b2f6326..76a2b7d 100644 --- a/ShellPkg/ShellPkg.dec +++ b/ShellPkg/ShellPkg.dec @@ -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 -- 1.9.5.msysgit.1 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

