Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergey Prigogin2012-06-07 18:33:53 +0000
committerSergey Prigogin2012-06-08 18:04:56 +0000
commit2e0ffe0ae5cf2436c4a5a599a91ab7c9d8280e0b (patch)
tree248c60ee788eb06b6091b09d605792c586342d62 /dsf-gdb
parent876ea78cbf9b9c48a9e6d52cb125b7e24ca0e298 (diff)
downloadorg.eclipse.cdt-2e0ffe0ae5cf2436c4a5a599a91ab7c9d8280e0b.tar.gz
org.eclipse.cdt-2e0ffe0ae5cf2436c4a5a599a91ab7c9d8280e0b.tar.xz
org.eclipse.cdt-2e0ffe0ae5cf2436c4a5a599a91ab7c9d8280e0b.zip
Bug 381804. Fix proposed by Marc Khouzam.
Diffstat (limited to 'dsf-gdb')
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/DebugNewProcessSequence.java56
1 files changed, 2 insertions, 54 deletions
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/DebugNewProcessSequence.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/DebugNewProcessSequence.java
index cb65bc988cf..ba0797d0f3b 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/DebugNewProcessSequence.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/DebugNewProcessSequence.java
@@ -14,7 +14,6 @@
package org.eclipse.cdt.dsf.gdb.service;
import java.io.File;
-import java.util.ArrayList;
import java.util.Map;
import java.util.Properties;
@@ -42,6 +41,7 @@ import org.eclipse.cdt.dsf.mi.service.MIProcesses;
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo;
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
+import org.eclipse.cdt.utils.CommandLineUtil;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
@@ -203,7 +203,7 @@ public class DebugNewProcessSequence extends ReflectionSequence {
String args = fBackend.getProgramArguments();
if (args != null) {
- String[] argArray = splitArguments(args);
+ String[] argArray = CommandLineUtil.argumentsToArray(args);
fCommandControl.queueCommand(
fCommandFactory.createMIGDBSetArgs(getContainerContext(), argArray),
new ImmediateDataRequestMonitor<MIInfo>(rm));
@@ -216,58 +216,6 @@ public class DebugNewProcessSequence extends ReflectionSequence {
}
}
- /**
- * Splits an argument string into individual arguments. Arguments can be separated by
- * one or more spaces and/or newline characters. Spaces inside single and double quotes
- * and backslash-escaped spaces are not considered separators and are preserved as part
- * of the arguments.
- *
- * @param args arguments as a single string
- * @return an array of arguments, each argument in a separate element
- */
- private String[] splitArguments(String args) {
- ArrayList<String> argList = new ArrayList<String>();
- StringBuilder buf = new StringBuilder();
- boolean insideSingleQuotes = false;
- boolean insideDoubleQuotes = false;
- boolean escaped = false;;
- for (int i = 0; i < args.length(); i++) {
- char c = args.charAt(i);
- switch (c) {
- case '\\':
- escaped = !escaped;
- break;
- case '\'':
- if (!escaped && !insideDoubleQuotes) {
- insideSingleQuotes = !insideSingleQuotes;
- }
- break;
- case '"':
- if (!escaped && !insideSingleQuotes) {
- insideDoubleQuotes = !insideDoubleQuotes;
- }
- break;
- case '\n':
- case '\t':
- c = ' ';
- //$FALL-THROUGH$
- case ' ':
- if (!escaped && !insideDoubleQuotes && !insideSingleQuotes) {
- if (buf.length() > 0) {
- argList.add(buf.toString());
- buf.delete(0, buf.length());
- }
- continue;
- }
- break;
- }
- buf.append(c);
- }
- if (buf.length() > 0)
- argList.add(buf.toString());
- return argList.toArray(new String[argList.size()]);
- }
-
/**
* If we are dealing with a remote debugging session, connect to the target.
* @since 4.0

Back to the top