Yao's suggestion seems like a good one. Reviewed-by: Jaben Carsey <[email protected]>
> -----Original Message----- > From: Yao, Jiewen > Sent: Wednesday, December 23, 2015 7:42 PM > To: Qiu, Shumin <[email protected]>; [email protected] > Cc: Carsey, Jaben <[email protected]>; Ni, Ruiyu <[email protected]>; > Qiu, Shumin <[email protected]> > Subject: RE: [edk2] [PATCH v3 2/4] ShellPkg: Refine the code logic of 'command > history'. > Importance: High > > Hi > I suggest we also handle PcdShellMaxHistoryCommandCount == 0 case. > > I think we can add below at the begging of function. > if (MaxHistoryCmdCount == 0) { > return ; > } > > Other change seems good. Reviewed by: [email protected] > > > Thank you > Yao Jiewen > > -----Original Message----- > From: edk2-devel [mailto:[email protected]] On Behalf Of Qiu > Shumin > Sent: Wednesday, December 23, 2015 2:15 PM > To: [email protected] > Cc: Carsey, Jaben; Ni, Ruiyu; Qiu, Shumin > Subject: [edk2] [PATCH v3 2/4] ShellPkg: Refine the code logic of 'command > history'. > > 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.CommandHistor > y.Link) > + ; !IsNull(&ShellInfoObject.ViewingSettings.CommandHistory.Link, > &Walker- > >Link) > + ; Walker = > (BUFFER_LIST*)GetNextNode(&ShellInfoObject.ViewingSettings.CommandHisto > ry.Link, &Walker->Link) > + ){ > + Count++; > + } > + if (Count < MaxHistoryCmdCount){ > + > + InsertTailList(&ShellInfoObject.ViewingSettings.CommandHistory.Link, > &Node->Link); } else { > + Walker = > (BUFFER_LIST*)GetFirstNode(&ShellInfoObject.ViewingSettings.CommandHistor > y.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|0x0000 > 000A > + > + ## This determines the max count of history commands > + > + > gEfiShellPkgTokenSpaceGuid.PcdShellMaxHistoryCommandCount|0x0020|UINT > 1 > + 6|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 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

