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(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 argList = new ArrayList(); - 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