On 17 September 2015 at 16:57, Qiu Shumin <shumin....@intel.com> wrote: > Difference with the 1st version: > It's not correct to casts away constness to allow TrimSpaces() to modify > 'commandline'. > This version make a copy of 'commandLine' and work with that in the remainder > of the function. > > Difference with the 2nd version > Remove the redundant code. > > Cc: Jaben Carsey <jaben.car...@intel.com> > Cc: Ruiyu Ni <ruiyu...@intel.com> > Cc: Yang Jadis <jadis.y...@intel.com> > Cc: Ard Biesheuvel <ard.biesheu...@linaro.org> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Qiu Shumin <shumin....@intel.com> > ---
Reviewed-by: Ard Biesheuvel <ard.biesheu...@linaro.org> Thanks! > .../Application/Shell/ShellParametersProtocol.c | 34 > +++++++++++++++------- > 1 file changed, 23 insertions(+), 11 deletions(-) > > diff --git a/ShellPkg/Application/Shell/ShellParametersProtocol.c > b/ShellPkg/Application/Shell/ShellParametersProtocol.c > index b404987..cd16140 100644 > --- a/ShellPkg/Application/Shell/ShellParametersProtocol.c > +++ b/ShellPkg/Application/Shell/ShellParametersProtocol.c > @@ -195,7 +195,9 @@ ParseCommandLineToArgs( > CHAR16 *TempParameter; > CHAR16 *Walker; > CHAR16 *NewParam; > + CHAR16 *NewCommandLine; > UINTN Size; > + EFI_STATUS Status; > > ASSERT(Argc != NULL); > ASSERT(Argv != NULL); > @@ -206,15 +208,21 @@ ParseCommandLineToArgs( > return (EFI_SUCCESS); > } > > - TrimSpaces(&(CHAR16*)CommandLine); > - Size = StrSize(CommandLine); > + NewCommandLine = AllocateCopyPool(StrSize(CommandLine), CommandLine); > + if (NewCommandLine == NULL){ > + return (EFI_OUT_OF_RESOURCES); > + } > + > + TrimSpaces(&NewCommandLine); > + Size = StrSize(NewCommandLine); > TempParameter = AllocateZeroPool(Size); > if (TempParameter == NULL) { > + SHELL_FREE_NON_NULL(NewCommandLine); > return (EFI_OUT_OF_RESOURCES); > } > > for ( Count = 0 > - , Walker = (CHAR16*)CommandLine > + , Walker = (CHAR16*)NewCommandLine > ; Walker != NULL && *Walker != CHAR_NULL > ; Count++ > ) { > @@ -228,30 +236,34 @@ ParseCommandLineToArgs( > // > (*Argv) = AllocateZeroPool((Count)*sizeof(CHAR16*)); > if (*Argv == NULL) { > - SHELL_FREE_NON_NULL(TempParameter); > - return (EFI_OUT_OF_RESOURCES); > + Status = EFI_OUT_OF_RESOURCES; > + goto Done; > } > > *Argc = 0; > - Walker = (CHAR16*)CommandLine; > + Walker = (CHAR16*)NewCommandLine; > while(Walker != NULL && *Walker != CHAR_NULL) { > SetMem16(TempParameter, Size, CHAR_NULL); > if (EFI_ERROR(GetNextParameter(&Walker, &TempParameter, Size))) { > - SHELL_FREE_NON_NULL(TempParameter); > - return (EFI_INVALID_PARAMETER); > + Status = EFI_INVALID_PARAMETER; > + goto Done; > } > > NewParam = AllocateCopyPool(StrSize(TempParameter), TempParameter); > if (NewParam == NULL){ > - SHELL_FREE_NON_NULL(TempParameter); > - return (EFI_OUT_OF_RESOURCES); > + Status = EFI_OUT_OF_RESOURCES; > + goto Done; > } > ((CHAR16**)(*Argv))[(*Argc)] = NewParam; > (*Argc)++; > } > ASSERT(Count >= (*Argc)); > + Status = EFI_SUCCESS; > + > +Done: > SHELL_FREE_NON_NULL(TempParameter); > - return (EFI_SUCCESS); > + SHELL_FREE_NON_NULL(NewCommandLine); > + return (Status); > } > > /** > -- > 1.9.5.msysgit.1 > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel