OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 patch class _WindowsCodePageDecoder { | 5 patch class _WindowsCodePageDecoder { |
6 /* patch */ static String _decodeBytes(List<int> bytes) | 6 /* patch */ static String _decodeBytes(List<int> bytes) |
7 native "SystemEncodingToString"; | 7 native "SystemEncodingToString"; |
8 } | 8 } |
9 | 9 |
10 | 10 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 } | 85 } |
86 int len = arguments.length; | 86 int len = arguments.length; |
87 _arguments = new List<String>(len); | 87 _arguments = new List<String>(len); |
88 for (int i = 0; i < len; i++) { | 88 for (int i = 0; i < len; i++) { |
89 var arg = arguments[i]; | 89 var arg = arguments[i]; |
90 if (arg is !String) { | 90 if (arg is !String) { |
91 throw new ArgumentError("Non-string argument: $arg"); | 91 throw new ArgumentError("Non-string argument: $arg"); |
92 } | 92 } |
93 _arguments[i] = arguments[i]; | 93 _arguments[i] = arguments[i]; |
94 if (Platform.operatingSystem == 'windows') { | 94 if (Platform.operatingSystem == 'windows') { |
95 _arguments[i] = _windowsArgumentEscape(_arguments[i], | 95 _arguments[i] = _windowsArgumentEscape(_arguments[i]); |
96 shellEscape: runInShell); | |
97 } | 96 } |
98 } | 97 } |
99 | 98 |
100 if (_workingDirectory != null && _workingDirectory is !String) { | 99 if (_workingDirectory != null && _workingDirectory is !String) { |
101 throw new ArgumentError( | 100 throw new ArgumentError( |
102 "WorkingDirectory is not a String: $_workingDirectory"); | 101 "WorkingDirectory is not a String: $_workingDirectory"); |
103 } | 102 } |
104 | 103 |
105 if (environment != null) { | 104 if (environment != null) { |
106 var env = environment; | 105 var env = environment; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 shellArguments.add("-c"); | 150 shellArguments.add("-c"); |
152 for (var arg in arguments) { | 151 for (var arg in arguments) { |
153 arg = arg.replaceAll("'", "'\"'\"'"); | 152 arg = arg.replaceAll("'", "'\"'\"'"); |
154 commandLine.write(" '$arg'"); | 153 commandLine.write(" '$arg'"); |
155 } | 154 } |
156 shellArguments.add(commandLine.toString()); | 155 shellArguments.add(commandLine.toString()); |
157 } | 156 } |
158 return shellArguments; | 157 return shellArguments; |
159 } | 158 } |
160 | 159 |
161 String _windowsArgumentEscape(String argument, { bool shellEscape: false }) { | 160 String _windowsArgumentEscape(String argument) { |
162 var result = argument; | 161 var result = argument; |
163 if (argument.contains('\t') || | 162 if (argument.contains('\t') || |
164 argument.contains(' ') || | 163 argument.contains(' ') || |
165 // TODO(ajohnsen): Remove shellEscape. | 164 argument.contains('"')) { |
166 (shellEscape && argument.contains('"'))) { | |
167 // Produce something that the C runtime on Windows will parse | 165 // Produce something that the C runtime on Windows will parse |
168 // back as this string. | 166 // back as this string. |
169 | 167 |
170 // Replace any number of '\' followed by '"' with | 168 // Replace any number of '\' followed by '"' with |
171 // twice as many '\' followed by '\"'. | 169 // twice as many '\' followed by '\"'. |
172 var backslash = '\\'.codeUnitAt(0); | 170 var backslash = '\\'.codeUnitAt(0); |
173 var sb = new StringBuffer(); | 171 var sb = new StringBuffer(); |
174 var nextPos = 0; | 172 var nextPos = 0; |
175 var quotePos = argument.indexOf('"', nextPos); | 173 var quotePos = argument.indexOf('"', nextPos); |
176 while (quotePos != -1) { | 174 while (quotePos != -1) { |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
385 const _ProcessResult(int this.pid, | 383 const _ProcessResult(int this.pid, |
386 int this.exitCode, | 384 int this.exitCode, |
387 this.stdout, | 385 this.stdout, |
388 this.stderr); | 386 this.stderr); |
389 | 387 |
390 final int pid; | 388 final int pid; |
391 final int exitCode; | 389 final int exitCode; |
392 final stdout; | 390 final stdout; |
393 final stderr; | 391 final stderr; |
394 } | 392 } |
OLD | NEW |