]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ShellPkg: Fix GCC build fail and code refine.
authorQiu Shumin <shumin.qiu@intel.com>
Fri, 18 Sep 2015 01:08:31 +0000 (01:08 +0000)
committershenshushi <shenshushi@Edk2>
Fri, 18 Sep 2015 01:08:31 +0000 (01:08 +0000)
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

ShellPkg/Application/Shell/ShellParametersProtocol.c

index b4049873404466e22b098c975c214abd06deb6ae..bbe026b644b27cc26262dfcd6b2be95ed97fa6f2 100644 (file)
@@ -195,7 +195,9 @@ ParseCommandLineToArgs(
   CHAR16      *TempParameter;\r
   CHAR16      *Walker;\r
   CHAR16      *NewParam;\r
+  CHAR16      *NewCommandLine;\r
   UINTN       Size;\r
+  EFI_STATUS  Status;\r
 \r
   ASSERT(Argc != NULL);\r
   ASSERT(Argv != NULL);\r
@@ -206,15 +208,21 @@ ParseCommandLineToArgs(
     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
+    SHELL_FREE_NON_NULL(NewCommandLine);\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
@@ -228,30 +236,34 @@ ParseCommandLineToArgs(
   //\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
   }\r
 \r
   *Argc = 0;\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
-      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
-      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
+  Status = EFI_SUCCESS;\r
+  \r
+Done:\r
   SHELL_FREE_NON_NULL(TempParameter);\r
-  return (EFI_SUCCESS);\r
+  SHELL_FREE_NON_NULL(NewCommandLine);\r
+  return (Status);\r
 }\r
 \r
 /**\r