1. Fix GCC build fail.
2. It's not correct to cast away constness to allow TrimSpaces() to modify 'commandline'.
This patch makes a copy of 'commandLine' and work with that in the remainder of the function.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Qiu Shumin <shumin.qiu@intel.com>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18500
6f19259b-4bc3-4df7-8a09-
765794883524
CHAR16 *TempParameter;\r
CHAR16 *Walker;\r
CHAR16 *NewParam;\r
CHAR16 *TempParameter;\r
CHAR16 *Walker;\r
CHAR16 *NewParam;\r
+ CHAR16 *NewCommandLine;\r
\r
ASSERT(Argc != NULL);\r
ASSERT(Argv != NULL);\r
\r
ASSERT(Argc != NULL);\r
ASSERT(Argv != NULL);\r
return (EFI_SUCCESS);\r
}\r
\r
return (EFI_SUCCESS);\r
}\r
\r
- TrimSpaces(&(CHAR16*)CommandLine);\r
- Size = StrSize(CommandLine);\r
+ NewCommandLine = AllocateCopyPool(StrSize(CommandLine), CommandLine);\r
+ if (NewCommandLine == NULL){\r
+ return (EFI_OUT_OF_RESOURCES);\r
+ }\r
+\r
+ TrimSpaces(&NewCommandLine);\r
+ Size = StrSize(NewCommandLine);\r
TempParameter = AllocateZeroPool(Size);\r
if (TempParameter == NULL) {\r
TempParameter = AllocateZeroPool(Size);\r
if (TempParameter == NULL) {\r
+ SHELL_FREE_NON_NULL(NewCommandLine);\r
return (EFI_OUT_OF_RESOURCES);\r
}\r
\r
for ( Count = 0\r
return (EFI_OUT_OF_RESOURCES);\r
}\r
\r
for ( Count = 0\r
- , Walker = (CHAR16*)CommandLine\r
+ , Walker = (CHAR16*)NewCommandLine\r
; Walker != NULL && *Walker != CHAR_NULL\r
; Count++\r
) {\r
; Walker != NULL && *Walker != CHAR_NULL\r
; Count++\r
) {\r
//\r
(*Argv) = AllocateZeroPool((Count)*sizeof(CHAR16*));\r
if (*Argv == NULL) {\r
//\r
(*Argv) = AllocateZeroPool((Count)*sizeof(CHAR16*));\r
if (*Argv == NULL) {\r
- SHELL_FREE_NON_NULL(TempParameter);\r
- return (EFI_OUT_OF_RESOURCES);\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ goto Done;\r
- Walker = (CHAR16*)CommandLine;\r
+ Walker = (CHAR16*)NewCommandLine;\r
while(Walker != NULL && *Walker != CHAR_NULL) {\r
SetMem16(TempParameter, Size, CHAR_NULL);\r
if (EFI_ERROR(GetNextParameter(&Walker, &TempParameter, Size))) {\r
while(Walker != NULL && *Walker != CHAR_NULL) {\r
SetMem16(TempParameter, Size, CHAR_NULL);\r
if (EFI_ERROR(GetNextParameter(&Walker, &TempParameter, Size))) {\r
- SHELL_FREE_NON_NULL(TempParameter);\r
- return (EFI_INVALID_PARAMETER);\r
+ Status = EFI_INVALID_PARAMETER;\r
+ goto Done;\r
}\r
\r
NewParam = AllocateCopyPool(StrSize(TempParameter), TempParameter);\r
if (NewParam == NULL){\r
}\r
\r
NewParam = AllocateCopyPool(StrSize(TempParameter), TempParameter);\r
if (NewParam == NULL){\r
- SHELL_FREE_NON_NULL(TempParameter);\r
- return (EFI_OUT_OF_RESOURCES);\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ goto Done;\r
}\r
((CHAR16**)(*Argv))[(*Argc)] = NewParam;\r
(*Argc)++;\r
}\r
ASSERT(Count >= (*Argc));\r
}\r
((CHAR16**)(*Argv))[(*Argc)] = NewParam;\r
(*Argc)++;\r
}\r
ASSERT(Count >= (*Argc));\r
+ Status = EFI_SUCCESS;\r
+ \r
+Done:\r
SHELL_FREE_NON_NULL(TempParameter);\r
SHELL_FREE_NON_NULL(TempParameter);\r
- return (EFI_SUCCESS);\r
+ SHELL_FREE_NON_NULL(NewCommandLine);\r
+ return (Status);\r