VOID\r
EFIAPI\r
GetNextParameter(\r
- CHAR16 **Walker,\r
- CHAR16 **TempParameter\r
+ IN OUT CHAR16 **Walker,\r
+ IN OUT CHAR16 **TempParameter,\r
+ IN CONST UINTN Length\r
)\r
{\r
CHAR16 *NextDelim;\r
//\r
// found ""\r
//\r
- StrCpy(*TempParameter, L"");\r
+ *(*TempParameter) = CHAR_NULL;\r
*Walker = NextDelim + 1;\r
} else if (NextDelim != NULL) {\r
\r
//\r
// last one... someone forgot the training quote!\r
//\r
- StrCpy(*TempParameter, *Walker);\r
+ StrnCpy(*TempParameter, *Walker, Length/sizeof(CHAR16) - 1);\r
*Walker = NULL;\r
}\r
for (TempLoc = *TempParameter ; TempLoc != NULL && *TempLoc != CHAR_NULL ; TempLoc++) {\r
//\r
// last one.\r
//\r
- StrCpy(*TempParameter, *Walker);\r
+ StrnCpy(*TempParameter, *Walker, Length/sizeof(CHAR16) - 1);\r
*Walker = NULL;\r
}\r
for (NextDelim = *TempParameter ; NextDelim != NULL && *NextDelim != CHAR_NULL ; NextDelim++) {\r
for ( Count = 0\r
, Walker = (CHAR16*)CommandLine\r
; Walker != NULL && *Walker != CHAR_NULL\r
- ; GetNextParameter(&Walker, &TempParameter)\r
+ ; GetNextParameter(&Walker, &TempParameter, Size)\r
, Count++\r
);\r
\r
-/* Count = 0;\r
- Walker = (CHAR16*)CommandLine;\r
- while(Walker != NULL) {\r
- GetNextParameter(&Walker, &TempParameter);\r
- Count++;\r
- }\r
-*/\r
//\r
// lets allocate the pointer array\r
//\r
Walker = (CHAR16*)CommandLine;\r
while(Walker != NULL && *Walker != CHAR_NULL) {\r
SetMem16(TempParameter, Size, CHAR_NULL);\r
- GetNextParameter(&Walker, &TempParameter);\r
- NewParam = AllocateZeroPool(StrSize(TempParameter));\r
- ASSERT(NewParam != NULL);\r
- StrCpy(NewParam, TempParameter);\r
+ GetNextParameter(&Walker, &TempParameter, Size);\r
+ NewParam = AllocateCopyPool(StrSize(TempParameter), TempParameter);\r
+ if (NewParam == NULL){\r
+ SHELL_FREE_NON_NULL(TempParameter);\r
+ return (EFI_OUT_OF_RESOURCES);\r
+ }\r
((CHAR16**)(*Argv))[(*Argc)] = NewParam;\r
(*Argc)++;\r
}\r
//\r
// re-populate the string to support any filenames that were in quotes.\r
//\r
- StrCpy(CommandLineCopy, NewCommandLine);\r
+ StrnCpy(CommandLineCopy, NewCommandLine, StrLen(NewCommandLine));\r
\r
if (FirstLocation != CommandLineCopy + StrLen(CommandLineCopy)\r
&& ((UINTN)(FirstLocation - CommandLineCopy) < StrLen(NewCommandLine))\r