]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Application/Shell/ShellParametersProtocol.c
ShellPkg: Removing ipf which is no longer supported from edk2.
[mirror_edk2.git] / ShellPkg / Application / Shell / ShellParametersProtocol.c
index b3767bbbf2b9b7d407a896b2d188f08cbda27dd8..90889a372524bfbe3e1e7aefcbd12b3e4e5d8148 100644 (file)
@@ -2,9 +2,10 @@
   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 - 2016, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2018, 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
@@ -25,7 +26,6 @@ BOOLEAN AsciiRedirection = FALSE;
   @param[in] String        the string to parse\r
 **/\r
 CONST CHAR16*\r
-EFIAPI\r
 FindEndOfParameter(\r
   IN CONST CHAR16 *String\r
   )\r
@@ -85,7 +85,6 @@ FindEndOfParameter(
   @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
@@ -148,8 +147,8 @@ DEBUG_CODE_END();
   // 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
@@ -166,9 +165,9 @@ DEBUG_CODE_END();
       //\r
       if (StripQuotation) {\r
         CopyMem ((CHAR16*)NextDelim, NextDelim + 1, StrSize (NextDelim + 1));\r
-         } else{\r
+    } else{\r
         NextDelim++;\r
-         }\r
+    }\r
     }\r
   }\r
 \r
@@ -182,7 +181,7 @@ DEBUG_CODE_END();
   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
@@ -195,7 +194,6 @@ DEBUG_CODE_END();
   @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
@@ -271,7 +269,7 @@ ParseCommandLineToArgs(
   }\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
@@ -295,7 +293,6 @@ Done:
   @sa ParseCommandLineToArgs\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 CreatePopulateInstallShellParametersProtocol (\r
   IN OUT EFI_SHELL_PARAMETERS_PROTOCOL  **NewShellParameters,\r
   IN OUT BOOLEAN                        *RootShellInstance\r
@@ -437,7 +434,6 @@ CreatePopulateInstallShellParametersProtocol (
   @sa UninstallProtocolInterface\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 CleanUpShellParametersProtocol (\r
   IN OUT EFI_SHELL_PARAMETERS_PROTOCOL  *NewShellParameters\r
   )\r
@@ -484,7 +480,6 @@ CleanUpShellParametersProtocol (
   @return An error upon failure.\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 IsUnicodeFile(\r
   IN CONST CHAR16 *FileName\r
   )\r
@@ -508,7 +503,7 @@ IsUnicodeFile(
   }\r
   gEfiShellProtocol->SetFilePosition(Handle, OriginalFilePosition);\r
   gEfiShellProtocol->CloseFile(Handle);\r
-  return (Status);  \r
+  return (Status);\r
 }\r
 \r
 /**\r
@@ -519,7 +514,6 @@ IsUnicodeFile(
   @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
@@ -571,7 +565,6 @@ CalculateEfiHdrCrc (
   @return       The modified FileName.\r
 **/\r
 CHAR16*\r
-EFIAPI\r
 FixFileName (\r
   IN CHAR16 *FileName\r
   )\r
@@ -587,7 +580,7 @@ FixFileName (
     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
@@ -595,7 +588,7 @@ FixFileName (
     }\r
     if ((TempLocation = StrStr(Copy , L" ")) != NULL) {\r
       TempLocation[0] = CHAR_NULL;\r
-    }    \r
+    }\r
   }\r
 \r
   if (Copy[0] == CHAR_NULL) {\r
@@ -614,7 +607,6 @@ FixFileName (
   @return       The modified FileName.\r
 **/\r
 CHAR16*\r
-EFIAPI\r
 FixVarName (\r
   IN CHAR16 *FileName\r
   )\r
@@ -628,7 +620,7 @@ FixVarName (
     Copy = FileName+1;\r
     if ((TempLocation = StrStr(Copy , L"%")) != NULL) {\r
       TempLocation[0] = CHAR_NULL;\r
-    }    \r
+    }\r
   }\r
 \r
   return (FixFileName(Copy));\r
@@ -637,13 +629,12 @@ FixVarName (
 /**\r
   Remove the unicode file tag from the begining of the file buffer since that will not be\r
   used by StdIn.\r
-  \r
+\r
   @param[in]  Handle    Pointer to the handle of the file to be processed.\r
-  \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
@@ -707,7 +698,6 @@ WriteFileTag (
   @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
@@ -736,6 +726,7 @@ UpdateStdInStdOutStdErr(
   UINTN             Size;\r
   SPLIT_LIST        *Split;\r
   CHAR16            *FirstLocation;\r
+  BOOLEAN           Volatile;\r
 \r
   OutUnicode      = TRUE;\r
   InUnicode       = TRUE;\r
@@ -846,7 +837,7 @@ UpdateStdInStdOutStdErr(
     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
@@ -873,7 +864,7 @@ UpdateStdInStdOutStdErr(
     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
@@ -887,7 +878,7 @@ UpdateStdInStdOutStdErr(
     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
@@ -1043,9 +1034,9 @@ UpdateStdInStdOutStdErr(
   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
@@ -1111,12 +1102,12 @@ UpdateStdInStdOutStdErr(
       //\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
@@ -1173,7 +1164,7 @@ UpdateStdInStdOutStdErr(
         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
@@ -1306,7 +1297,6 @@ UpdateStdInStdOutStdErr(
   @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
@@ -1317,7 +1307,7 @@ RestoreStdInStdOutStdErr (
 {\r
   SPLIT_LIST        *Split;\r
 \r
-  if (ShellParameters == NULL \r
+  if (ShellParameters == NULL\r
     ||OldStdIn        == NULL\r
     ||OldStdOut       == NULL\r
     ||OldStdErr       == NULL\r
@@ -1383,7 +1373,6 @@ RestoreStdInStdOutStdErr (
   @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
@@ -1393,7 +1382,7 @@ UpdateArgcArgv(
   )\r
 {\r
   BOOLEAN                 StripParamQuotation;\r
-  \r
+\r
   ASSERT(ShellParameters != NULL);\r
   StripParamQuotation = TRUE;\r
 \r
@@ -1407,10 +1396,10 @@ UpdateArgcArgv(
   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
@@ -1425,7 +1414,6 @@ UpdateArgcArgv(
   @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