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

Reply via email to