diff --git a/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs b/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs index 7ce0a4419..9171933bb 100644 --- a/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs +++ b/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs @@ -367,65 +367,6 @@ namespace System.Management.Automation // TODO:PSL clean this up return 0; } - - /// - /// This models the native call CommandLineToArgvW in managed code. - /// - internal static string[] CommandLineToArgv(string command) - { - StringBuilder arguments = new StringBuilder(); - int len = command.Length; - IList returnList = new List(); - bool inquote = false; - char current = '\0'; - - for (int argIndex = 0; argIndex < len; argIndex++) - { - current = command[argIndex]; - - if (current.Equals('"')) - { - // Treat anything in quotes as a single argument - // Because C# treats quotes differently than C++, instead of counting the slashes - // it makes more sense to count the quotes. - inquote = !inquote; - arguments.Append('"'); - continue; - } - - // If we're inside a quote, add the current character and cycle through - if (inquote && !current.Equals('"')) - { - arguments.Append(current.ToString()); - continue; - } - - if (current.Equals("\\")) - { - arguments.Append("\\"); - continue; - } - - if (string.IsNullOrWhiteSpace(current.ToString())) - { - if (arguments.Length > 0) - { - returnList.Add(arguments.ToString()); - arguments.Clear(); - } - continue; - } - - // All other exclusion scenarios being exhausted, append the current character. - arguments.Append(current.ToString()); - } - - // add the final object to the arguments list - returnList.Add(arguments.ToString()); - arguments.Clear(); - - return returnList.ToArray(); - } } internal static class Unix diff --git a/src/System.Management.Automation/engine/NativeCommandParameterBinder.cs b/src/System.Management.Automation/engine/NativeCommandParameterBinder.cs index 50a4675cc..102ba2ede 100644 --- a/src/System.Management.Automation/engine/NativeCommandParameterBinder.cs +++ b/src/System.Management.Automation/engine/NativeCommandParameterBinder.cs @@ -16,11 +16,6 @@ namespace System.Management.Automation /// internal class NativeCommandParameterBinder : ParameterBinderBase { - #region tracer - [TraceSource("NativeCommandParameterBinder","The parameter binder for native commands")] - static private PSTraceSource tracer = PSTraceSource.GetTracer ("NativeCommandParameterBinder", "The parameter binder for native commands"); - #endregion tracer - #region ctor /// @@ -129,21 +124,7 @@ namespace System.Management.Automation { get { - var rawArgs = arguments.ToString(); - - if (tracer.IsEnabled && Platform.IsWindows) - { - // This tracing really shouldn't be in the property getter... - tracer.WriteLine("Raw argument string: {0}", rawArgs); - string[] parsedArguments = CommandLineParameterBinderNativeMethods.PreParseCommandLine(rawArgs); - - for (int counter = 0; counter < parsedArguments.Length; counter++) - { - tracer.WriteLine("Argument {0}: {1}", counter, parsedArguments[counter]); - } - } - - return rawArgs; + return arguments.ToString(); } } // Arguments private readonly StringBuilder arguments = new StringBuilder(); @@ -250,39 +231,4 @@ namespace System.Management.Automation #endregion private members } - internal static class CommandLineParameterBinderNativeMethods - { - public static string[] PreParseCommandLine(string commandLine) - { - int numberOfArguments = 0; - IntPtr parsedCommandLine = CommandLineToArgvW(commandLine, out numberOfArguments); - - if(parsedCommandLine == IntPtr.Zero) - return null; - - try - { - string[] results = new string[numberOfArguments - 1]; - for (int counter = 1; counter < numberOfArguments; counter++) - { - results[counter - 1] = Marshal.PtrToStringUni( - Marshal.ReadIntPtr(parsedCommandLine, counter * IntPtr.Size)); - } - - return results; - } - finally - { - LocalFree(parsedCommandLine); - } - } - - [DllImport(PinvokeDllNames.CommandLineToArgvDllName, SetLastError = true)] - static extern IntPtr CommandLineToArgvW( - [MarshalAs(UnmanagedType.LPWStr)] string lpCmdLine, - out int pNumArgs); - - [DllImport(PinvokeDllNames.LocalFreeDllName)] - static extern IntPtr LocalFree(IntPtr hMem); - } } // namespace System.Management.Automation diff --git a/test/csharp/test_CorePsPlatform.cs b/test/csharp/test_CorePsPlatform.cs index 80d387891..2a6fa2d94 100644 --- a/test/csharp/test_CorePsPlatform.cs +++ b/test/csharp/test_CorePsPlatform.cs @@ -255,112 +255,5 @@ namespace PSTests File.Delete(path); File.Delete(link); } - - [Fact] - public static void TestCommandLineArgvReturnsAnElement() - { - string testCommand= "Today"; - - string[] retval = Platform.CommandLineToArgv(testCommand); - - Assert.Equal(1, retval.Length); - } - - [Fact] - public static void TestCommandLineArgvWWithSpaces() - { - string testCommand= "Today is a good day or is it"; - - string[] retval = Platform.CommandLineToArgv(testCommand); - - Assert.Equal("Today", retval[0]); - Assert.Equal("is", retval[1]); - Assert.Equal("a", retval[2]); - Assert.Equal("good", retval[3]); - Assert.Equal("day", retval[4]); - Assert.Equal("or", retval[5]); - Assert.Equal("is", retval[6]); - Assert.Equal("it", retval[7]); - } - - [Fact] - public static void TestCommandLineToArgvWTabsAreTreatedAsSpaces() - { - string testCommand = "Today \t is a good day"; - - string[] retval = Platform.CommandLineToArgv(testCommand); - - Assert.Equal("Today", retval[0]); - Assert.Equal("is", retval[1]); - Assert.Equal("a", retval[2]); - Assert.Equal("good", retval[3]); - Assert.Equal("day", retval[4]); - } - - [Fact] - public static void TestCommandLineToArgvWQuotesAreArgs() - { - string testCommand = "Today is \"a good\" day"; - - string[] retval = Platform.CommandLineToArgv(testCommand); - - Assert.Equal(4, retval.Length); - Assert.Equal("Today", retval[0]); - Assert.Equal("is", retval[1]); - Assert.Equal("\"a good\"", retval[2]); - Assert.Equal("day", retval[3]); - } - - [Fact] - public static void TestCommandLineToArgvWEvenNumberBackSlashes() - { - string test1 = "a\\b c d"; - string test2 = "a\\b\\c d"; - string test3 = "a \\b\\c\\d"; - string test4 = "a\\\\\\b"; - string[] retval; - - retval = Platform.CommandLineToArgv(test1); - - Assert.Equal(3, retval.Length); - Assert.Equal("a\\b", retval[0]); - Assert.Equal("c", retval[1]); - Assert.Equal("d", retval[2]); - - retval = Platform.CommandLineToArgv(test2); - - Assert.Equal(2, retval.Length); - Assert.Equal("a\\b\\c", retval[0]); - Assert.Equal("d", retval[1]); - - retval = Platform.CommandLineToArgv(test3); - - Assert.Equal(2, retval.Length); - Assert.Equal("a", retval[0]); - Assert.Equal("\\b\\c\\d", retval[1]); - - retval = Platform.CommandLineToArgv(test4); - - Assert.Equal(1, retval.Length); - Assert.Equal("a\\\\\\b", retval[0]); - } - - [Fact] - public static void TestCommandLineToArgvwOddNumberWithBackSlashes() - { - string test1 = "a\\\"b"; - string test2 = "a\\\\\\\"b"; - string[] retval; - - retval = Platform.CommandLineToArgv(test1); - - Assert.Equal(1, retval.Length); - Assert.Equal("a\\\"b", retval[0]); - - retval = Platform.CommandLineToArgv(test2); - - Assert.Equal(1, retval.Length); - Assert.Equal("a\\\\\\\"b", retval[0]); - } } }