Member functions of EFI_SHELL_PARAMETERS_PROTOCOL and functions for creation,\r
manipulation, and initialization of EFI_SHELL_PARAMETERS_PROTOCOL.\r
\r
+ (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
Copyright (C) 2014, Red Hat, Inc.\r
(C) Copyright 2013 Hewlett-Packard Development Company, L.P.<BR>\r
- Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
@param[in] String the string to parse\r
**/\r
CONST CHAR16*\r
-EFIAPI\r
FindEndOfParameter(\r
IN CONST CHAR16 *String\r
)\r
This will also remove all remaining ^ characters after processing.\r
\r
@param[in, out] Walker pointer to string of command line. Adjusted to\r
- reminaing command line on return\r
+ remaining command line on return\r
@param[in, out] TempParameter pointer to string of command line item extracted.\r
@param[in] Length buffer size of TempParameter.\r
@param[in] StripQuotation if TRUE then strip the quotation marks surrounding\r
the parameters.\r
\r
- @return EFI_INALID_PARAMETER A required parameter was NULL or pointed to a NULL or empty string.\r
+ @return EFI_INVALID_PARAMETER A required parameter was NULL or pointed to a NULL or empty string.\r
@return EFI_NOT_FOUND A closing " could not be found on the specified string\r
**/\r
EFI_STATUS\r
-EFIAPI\r
GetNextParameter(\r
IN OUT CHAR16 **Walker,\r
IN OUT CHAR16 **TempParameter,\r
StrnCpyS(*TempParameter, Length / sizeof(CHAR16), (*Walker), NextDelim - *Walker);\r
\r
//\r
- // Add a CHAR_NULL if we didnt get one via the copy\r
+ // Add a CHAR_NULL if we didn't get one via the copy\r
//\r
if (*NextDelim != CHAR_NULL) {\r
(*TempParameter)[NextDelim - *Walker] = CHAR_NULL;\r
// Remove any non-escaped quotes in the string\r
// Remove any remaining escape characters in the string\r
//\r
- for (NextDelim = FindFirstCharacter(*TempParameter, L"\"^", CHAR_NULL) \r
- ; *NextDelim != CHAR_NULL \r
+ for (NextDelim = FindFirstCharacter(*TempParameter, L"\"^", CHAR_NULL)\r
+ ; *NextDelim != CHAR_NULL\r
; NextDelim = FindFirstCharacter(NextDelim, L"\"^", CHAR_NULL)\r
) {\r
if (*NextDelim == L'^') {\r
//\r
if (StripQuotation) {\r
CopyMem ((CHAR16*)NextDelim, NextDelim + 1, StrSize (NextDelim + 1));\r
- } else{\r
+ } else{\r
NextDelim++;\r
- }\r
+ }\r
}\r
}\r
\r
parameters for inclusion in EFI_SHELL_PARAMETERS_PROTOCOL. this supports space\r
delimited and quote surrounded parameter definition.\r
\r
- All special character processing (alias, environment variable, redirection, \r
+ All special character processing (alias, environment variable, redirection,\r
etc... must be complete before calling this API.\r
\r
@param[in] CommandLine String of command line to parse\r
@param[in, out] Argv pointer to array of strings; one for each parameter\r
@param[in, out] Argc pointer to number of strings in Argv array\r
\r
- @return EFI_SUCCESS the operation was sucessful\r
+ @return EFI_SUCCESS the operation was successful\r
+ @return EFI_INVALID_PARAMETER some parameters are invalid\r
@return EFI_OUT_OF_RESOURCES a memory allocation failed.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
ParseCommandLineToArgs(\r
IN CONST CHAR16 *CommandLine,\r
IN BOOLEAN StripQuotation,\r
}\r
ASSERT(Count >= (*Argc));\r
Status = EFI_SUCCESS;\r
- \r
+\r
Done:\r
SHELL_FREE_NON_NULL(TempParameter);\r
SHELL_FREE_NON_NULL(NewCommandLine);\r
@sa ParseCommandLineToArgs\r
**/\r
EFI_STATUS\r
-EFIAPI\r
CreatePopulateInstallShellParametersProtocol (\r
IN OUT EFI_SHELL_PARAMETERS_PROTOCOL **NewShellParameters,\r
IN OUT BOOLEAN *RootShellInstance\r
}\r
\r
/**\r
- frees all memory used by createion and installation of shell parameters protocol\r
+ frees all memory used by creation and installation of shell parameters protocol\r
and if there was an old version installed it will restore that one.\r
\r
@param NewShellParameters the interface of EFI_SHELL_PARAMETERS_PROTOCOL that is\r
@sa UninstallProtocolInterface\r
**/\r
EFI_STATUS\r
-EFIAPI\r
CleanUpShellParametersProtocol (\r
IN OUT EFI_SHELL_PARAMETERS_PROTOCOL *NewShellParameters\r
)\r
}\r
\r
/**\r
- Determin if a file name represents a unicode file.\r
+ Determine if a file name represents a unicode file.\r
\r
@param[in] FileName Pointer to the filename to open.\r
\r
@return An error upon failure.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
IsUnicodeFile(\r
IN CONST CHAR16 *FileName\r
)\r
}\r
gEfiShellProtocol->SetFilePosition(Handle, OriginalFilePosition);\r
gEfiShellProtocol->CloseFile(Handle);\r
- return (Status); \r
+ return (Status);\r
}\r
\r
/**\r
@param[in, out] TheString A pointer to the string to update.\r
**/\r
VOID\r
-EFIAPI\r
StripQuotes (\r
IN OUT CHAR16 *TheString\r
)\r
}\r
\r
/**\r
- Calcualte the 32-bit CRC in a EFI table using the service provided by the\r
+ Calculate the 32-bit CRC in a EFI table using the service provided by the\r
gRuntime service.\r
\r
@param Hdr Pointer to an EFI standard header\r
@return The modified FileName.\r
**/\r
CHAR16*\r
-EFIAPI\r
FixFileName (\r
IN CHAR16 *FileName\r
)\r
Copy = FileName+1;\r
if ((TempLocation = StrStr(Copy , L"\"")) != NULL) {\r
TempLocation[0] = CHAR_NULL;\r
- } \r
+ }\r
} else {\r
Copy = FileName;\r
while(Copy[0] == L' ') {\r
}\r
if ((TempLocation = StrStr(Copy , L" ")) != NULL) {\r
TempLocation[0] = CHAR_NULL;\r
- } \r
+ }\r
}\r
\r
if (Copy[0] == CHAR_NULL) {\r
@return The modified FileName.\r
**/\r
CHAR16*\r
-EFIAPI\r
FixVarName (\r
IN CHAR16 *FileName\r
)\r
Copy = FileName+1;\r
if ((TempLocation = StrStr(Copy , L"%")) != NULL) {\r
TempLocation[0] = CHAR_NULL;\r
- } \r
+ }\r
}\r
\r
return (FixFileName(Copy));\r
}\r
\r
-/**\r
- Remove the unicode file tag from the begining of the file buffer since that will not be\r
- used by StdIn.\r
- \r
- @param[in] Handle Pointer to the handle of the file to be processed.\r
- \r
- @retval EFI_SUCCESS The unicode file tag has been moved successfully.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-RemoveFileTag(\r
- IN SHELL_FILE_HANDLE *Handle\r
- )\r
-{\r
- UINTN CharSize;\r
- CHAR16 CharBuffer;\r
-\r
- CharSize = sizeof(CHAR16);\r
- CharBuffer = 0;\r
- gEfiShellProtocol->ReadFile(*Handle, &CharSize, &CharBuffer);\r
- if (CharBuffer != gUnicodeFileTag) {\r
- gEfiShellProtocol->SetFilePosition(*Handle, 0);\r
- }\r
- return (EFI_SUCCESS);\r
-}\r
\r
/**\r
Write the unicode file tag to the specified file.\r
\r
\r
/**\r
- Funcion will replace the current StdIn and StdOut in the ShellParameters protocol\r
+ Function will replace the current StdIn and StdOut in the ShellParameters protocol\r
structure by parsing NewCommandLine. The current values are returned to the\r
user.\r
\r
@param[out] OldStdErr Pointer to old StdErr.\r
@param[out] SystemTableInfo Pointer to old system table information.\r
\r
- @retval EFI_SUCCESS Operation was sucessful, Argv and Argc are valid.\r
+ @retval EFI_SUCCESS Operation was successful, Argv and Argc are valid.\r
@retval EFI_OUT_OF_RESOURCES A memory allocation failed.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
UpdateStdInStdOutStdErr(\r
IN OUT EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters,\r
IN CHAR16 *NewCommandLine,\r
UINTN Size;\r
SPLIT_LIST *Split;\r
CHAR16 *FirstLocation;\r
+ BOOLEAN Volatile;\r
\r
OutUnicode = TRUE;\r
InUnicode = TRUE;\r
if (StrStr(CommandLineWalker, L" 1>> ") != NULL) {\r
Status = EFI_NOT_FOUND;\r
}\r
- } \r
+ }\r
if (!EFI_ERROR(Status) && (CommandLineWalker = StrStr(CommandLineCopy, L" >> ")) != NULL) {\r
FirstLocation = MIN(CommandLineWalker, FirstLocation);\r
SetMem16(CommandLineWalker, 8, L' ');\r
if (StrStr(CommandLineWalker, L" >>a ") != NULL) {\r
Status = EFI_NOT_FOUND;\r
}\r
- } \r
+ }\r
if (!EFI_ERROR(Status) && (CommandLineWalker = StrStr(CommandLineCopy, L" 1>a ")) != NULL) {\r
FirstLocation = MIN(CommandLineWalker, FirstLocation);\r
SetMem16(CommandLineWalker, 10, L' ');\r
if (StrStr(CommandLineWalker, L" 1>a ") != NULL) {\r
Status = EFI_NOT_FOUND;\r
}\r
- } \r
+ }\r
if (!EFI_ERROR(Status) && (CommandLineWalker = StrStr(CommandLineCopy, L" >a ")) != NULL) {\r
FirstLocation = MIN(CommandLineWalker, FirstLocation);\r
SetMem16(CommandLineWalker, 8, L' ');\r
StrnCpyS(CommandLineCopy, StrSize(CommandLineCopy)/sizeof(CHAR16), NewCommandLine, StrLen(NewCommandLine));\r
\r
if (FirstLocation != CommandLineCopy + StrLen(CommandLineCopy)\r
- && ((UINTN)(FirstLocation - CommandLineCopy) < StrLen(NewCommandLine))\r
+ && (((UINTN)FirstLocation - (UINTN)CommandLineCopy)/sizeof(CHAR16) < StrLen(NewCommandLine))\r
){\r
- *(NewCommandLine + (UINTN)(FirstLocation - CommandLineCopy)) = CHAR_NULL;\r
+ *(NewCommandLine + ((UINTN)FirstLocation - (UINTN)CommandLineCopy)/sizeof(CHAR16)) = CHAR_NULL;\r
}\r
\r
if (!EFI_ERROR(Status)) {\r
//\r
// Check for no volatile environment variables\r
//\r
- ||(StdErrVarName != NULL && !IsVolatileEnv(StdErrVarName))\r
- ||(StdOutVarName != NULL && !IsVolatileEnv(StdOutVarName))\r
+ ||(StdErrVarName != NULL && !EFI_ERROR (IsVolatileEnv (StdErrVarName, &Volatile)) && !Volatile)\r
+ ||(StdOutVarName != NULL && !EFI_ERROR (IsVolatileEnv (StdOutVarName, &Volatile)) && !Volatile)\r
//\r
// Cant redirect during a reconnect operation.\r
//\r
- ||(StrStr(NewCommandLine, L"connect -r") != NULL \r
+ ||(StrStr(NewCommandLine, L"connect -r") != NULL\r
&& (StdOutVarName != NULL || StdOutFileName != NULL || StdErrFileName != NULL || StdErrVarName != NULL))\r
//\r
// Check that filetypes (Unicode/Ascii) do not change during an append\r
if (TempHandle == NULL) {\r
Status = EFI_INVALID_PARAMETER;\r
} else {\r
- if (StrStr(StdOutFileName, L"NUL")==StdOutFileName) {\r
+ if (gUnicodeCollation->MetaiMatch (gUnicodeCollation, StdOutFileName, L"NUL")) {\r
//no-op\r
} else if (!OutAppend && OutUnicode && !EFI_ERROR(Status)) {\r
Status = WriteFileTag (TempHandle);\r
EFI_FILE_MODE_READ,\r
0);\r
if (!EFI_ERROR(Status)) {\r
- if (!InUnicode) {
- //
- // Create the ASCII->Unicode conversion layer
- //
- TempHandle = CreateFileInterfaceFile(TempHandle, FALSE);
- }
+ if (!InUnicode) {\r
+ //\r
+ // Create the ASCII->Unicode conversion layer\r
+ //\r
+ TempHandle = CreateFileInterfaceFile(TempHandle, FALSE);\r
+ }\r
ShellParameters->StdIn = TempHandle;\r
gST->ConIn = CreateSimpleTextInOnFile(TempHandle, &gST->ConsoleInHandle);\r
}\r
}\r
\r
/**\r
- Funcion will replace the current StdIn and StdOut in the ShellParameters protocol\r
+ Function will replace the current StdIn and StdOut in the ShellParameters protocol\r
structure with StdIn and StdOut. The current values are de-allocated.\r
\r
@param[in, out] ShellParameters Pointer to parameter structure to modify.\r
@param[in] SystemTableInfo Pointer to old system table information.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
RestoreStdInStdOutStdErr (\r
IN OUT EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters,\r
IN SHELL_FILE_HANDLE *OldStdIn,\r
{\r
SPLIT_LIST *Split;\r
\r
- if (ShellParameters == NULL \r
+ if (ShellParameters == NULL\r
||OldStdIn == NULL\r
||OldStdOut == NULL\r
||OldStdErr == NULL\r
return (EFI_SUCCESS);\r
}\r
/**\r
- Funcion will replace the current Argc and Argv in the ShellParameters protocol\r
+ Function will replace the current Argc and Argv in the ShellParameters protocol\r
structure by parsing NewCommandLine. The current values are returned to the\r
user.\r
\r
@param[out] OldArgv Pointer to old list of parameters.\r
@param[out] OldArgc Pointer to old number of items in Argv list.\r
\r
- @retval EFI_SUCCESS Operation was sucessful, Argv and Argc are valid.\r
+\r
+ @retval EFI_SUCCESS Operation was successful, Argv and Argc are valid.\r
+ @return EFI_INVALID_PARAMETER Some parameters are invalid.\r
@retval EFI_OUT_OF_RESOURCES A memory allocation failed.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
UpdateArgcArgv(\r
IN OUT EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters,\r
IN CONST CHAR16 *NewCommandLine,\r
)\r
{\r
BOOLEAN StripParamQuotation;\r
- \r
+\r
ASSERT(ShellParameters != NULL);\r
StripParamQuotation = TRUE;\r
\r
if (Type == Script_File_Name) {\r
StripParamQuotation = FALSE;\r
}\r
- \r
- return ParseCommandLineToArgs( NewCommandLine, \r
- StripParamQuotation, \r
- &(ShellParameters->Argv), \r
+\r
+ return ParseCommandLineToArgs( NewCommandLine,\r
+ StripParamQuotation,\r
+ &(ShellParameters->Argv),\r
&(ShellParameters->Argc)\r
);\r
}\r
\r
/**\r
- Funcion will replace the current Argc and Argv in the ShellParameters protocol\r
+ Function will replace the current Argc and Argv in the ShellParameters protocol\r
structure with Argv and Argc. The current values are de-allocated and the\r
OldArgv must not be deallocated by the caller.\r
\r
@param[in] OldArgc pointer to old number of items in Argv list\r
**/\r
VOID\r
-EFIAPI\r
RestoreArgcArgv(\r
IN OUT EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters,\r
IN CHAR16 ***OldArgv,\r