diff options
author | Sergey Prigogin | 2012-06-07 18:33:53 +0000 |
---|---|---|
committer | Sergey Prigogin | 2012-06-08 18:04:56 +0000 |
commit | 2e0ffe0ae5cf2436c4a5a599a91ab7c9d8280e0b (patch) | |
tree | 248c60ee788eb06b6091b09d605792c586342d62 /dsf-gdb | |
parent | 876ea78cbf9b9c48a9e6d52cb125b7e24ca0e298 (diff) | |
download | org.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.java | 56 |
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 |