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
This commit is contained in:
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user