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:
Qiu Shumin
2015-12-24 08:06:28 +00:00
committed by shenshushi
parent fe709fe4b7
commit a4f138a412
3 changed files with 44 additions and 13 deletions

View File

@ -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);
}
}
/**