Hdr->CRC32 = Crc;\r
}\r
\r
+/**\r
+ Fix a string to only have the file name, removing starting at the first space of whatever is quoted.\r
+\r
+ @param[in] FileName The filename to start with.\r
+\r
+ @retval NULL FileName was invalid.\r
+ @return The modified FileName.\r
+**/\r
+CHAR16*\r
+EFIAPI\r
+FixFileName (\r
+ IN CHAR16 *FileName\r
+ )\r
+{\r
+ CHAR16 *Copy;\r
+ CHAR16 *TempLocation;\r
+\r
+ if (FileName == NULL) {\r
+ return (NULL);\r
+ }\r
+\r
+ if (FileName[0] == L'\"') {\r
+ Copy = FileName+1;\r
+ if ((TempLocation = StrStr(Copy , L"\"")) != NULL) {\r
+ TempLocation[0] = CHAR_NULL;\r
+ } \r
+ } else {\r
+ Copy = FileName;\r
+ if ((TempLocation = StrStr(Copy , L" ")) != NULL) {\r
+ TempLocation[0] = CHAR_NULL;\r
+ } \r
+ }\r
+\r
+ if (Copy[0] == CHAR_NULL) {\r
+ return (NULL);\r
+ }\r
+\r
+ return (Copy);\r
+}\r
+\r
/**\r
Funcion will replace the current StdIn and StdOut in the ShellParameters protocol\r
structure by parsing NewCommandLine. The current values are returned to the\r
}\r
}\r
\r
+ //\r
+ // re-populate the string to support any filenames that were in quotes.\r
+ //\r
+ StrCpy(CommandLineCopy, NewCommandLine);\r
+\r
if (FirstLocation != CommandLineCopy + StrLen(CommandLineCopy)\r
&& ((UINTN)(FirstLocation - CommandLineCopy) < StrLen(NewCommandLine))\r
){\r
}\r
\r
if (!EFI_ERROR(Status)) {\r
- if (StdErrFileName != NULL && (CommandLineWalker = StrStr(StdErrFileName, L" ")) != NULL) {\r
- CommandLineWalker[0] = CHAR_NULL;\r
+\r
+ if (StdErrFileName != NULL) {\r
+ if ((StdErrFileName = FixFileName(StdErrFileName)) == NULL) {\r
+ Status = EFI_INVALID_PARAMETER;\r
+ }\r
}\r
- if (StdOutFileName != NULL && (CommandLineWalker = StrStr(StdOutFileName, L" ")) != NULL) {\r
- CommandLineWalker[0] = CHAR_NULL;\r
+ if (StdOutFileName != NULL) {\r
+ if ((StdOutFileName = FixFileName(StdOutFileName)) == NULL) {\r
+ Status = EFI_INVALID_PARAMETER;\r
+ }\r
}\r
- if (StdInFileName != NULL && (CommandLineWalker = StrStr(StdInFileName , L" ")) != NULL) {\r
- CommandLineWalker[0] = CHAR_NULL;\r
+ if (StdInFileName != NULL) {\r
+ if ((StdInFileName = FixFileName(StdInFileName)) == NULL) {\r
+ Status = EFI_INVALID_PARAMETER;\r
+ }\r
}\r
- if (StdErrVarName != NULL && (CommandLineWalker = StrStr(StdErrVarName , L" ")) != NULL) {\r
- CommandLineWalker[0] = CHAR_NULL;\r
+ if (StdErrVarName != NULL) {\r
+ if ((StdErrVarName = FixFileName(StdErrVarName)) == NULL) {\r
+ Status = EFI_INVALID_PARAMETER;\r
+ }\r
}\r
- if (StdOutVarName != NULL && (CommandLineWalker = StrStr(StdOutVarName , L" ")) != NULL) {\r
- CommandLineWalker[0] = CHAR_NULL;\r
+ if (StdOutVarName != NULL) {\r
+ if ((StdOutVarName = FixFileName(StdOutVarName)) == NULL) {\r
+ Status = EFI_INVALID_PARAMETER;\r
+ }\r
}\r
- if (StdInVarName != NULL && (CommandLineWalker = StrStr(StdInVarName , L" ")) != NULL) {\r
- CommandLineWalker[0] = CHAR_NULL;\r
+ if (StdInVarName != NULL) {\r
+ if ((StdInVarName = FixFileName(StdInVarName)) == NULL) {\r
+ Status = EFI_INVALID_PARAMETER;\r
+ }\r
}\r
\r
//\r