Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/build
diff options
context:
space:
mode:
authorVladimir Hirsl2005-01-11 17:28:26 +0000
committerVladimir Hirsl2005-01-11 17:28:26 +0000
commit2758147c933f562c333c81f20df8073301465085 (patch)
tree3caeb2ab668966a9ab0447ab9994ae7b86c19425 /build
parent70a3403e0bb8dc728aa97d162156c79c925462fd (diff)
downloadorg.eclipse.cdt-2758147c933f562c333c81f20df8073301465085.tar.gz
org.eclipse.cdt-2758147c933f562c333c81f20df8073301465085.tar.xz
org.eclipse.cdt-2758147c933f562c333c81f20df8073301465085.zip
Fix for PR 82408 [ScannerConfig] GCCScannerInfoConsoleParser throws exception on "quoted spaces".
The problem was incorrect parsing of lines containing "matched" characters (`, ' and ").
Diffstat (limited to 'build')
-rw-r--r--build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCScannerInfoConsoleParser.java41
1 files changed, 40 insertions, 1 deletions
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCScannerInfoConsoleParser.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCScannerInfoConsoleParser.java
index e043164cdb0..3e534d8f0b5 100644
--- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCScannerInfoConsoleParser.java
+++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCScannerInfoConsoleParser.java
@@ -34,6 +34,7 @@ import java.util.Map;
public class GCCScannerInfoConsoleParser implements IScannerInfoConsoleParser {
private final static String SINGLE_QUOTE_STRING = "\'"; //$NON-NLS-1$
private final static String DOUBLE_QUOTE_STRING = "\""; //$NON-NLS-1$
+ private final static char[] matchingChars = {'`', '\'', '\"'};
private IProject fProject = null;
private IScannerInfoConsoleParserUtility fUtil = null;
@@ -89,7 +90,8 @@ public class GCCScannerInfoConsoleParser implements IScannerInfoConsoleParser {
}
// Known patterns:
// (a) gcc|g++ ... -Dxxx -Iyyy ...
- ArrayList allTokens = new ArrayList(Arrays.asList(line.split("\\s")));//$NON-NLS-1$
+ List allTokens = tokenize(line);
+// ArrayList allTokens = new ArrayList(Arrays.asList(line.split("\\s+")));//$NON-NLS-1$
if (allTokens.size() <= 1)
return false;
Iterator I = allTokens.iterator();
@@ -182,6 +184,43 @@ public class GCCScannerInfoConsoleParser implements IScannerInfoConsoleParser {
/**
* @param line
+ * @return
+ */
+ private List tokenize(String line) {
+ List rv = new ArrayList(2);
+ // find special characters that need to be matched: `, ' and "
+ // First Matching Chararcter
+ int prevFmc = line.length();
+ int emc = -1;
+ char matchingChar = 0;
+ for (int i = 0; i < matchingChars.length; ++i) {
+ char ch = matchingChars[i];
+ int fmc = line.indexOf(ch);
+ if (fmc > -1 && fmc < prevFmc) {
+ emc = line.indexOf(ch, fmc+1);
+ if (emc > fmc) {
+ matchingChar = ch;
+ prevFmc = fmc;
+ }
+ }
+ }
+ if (matchingChar != 0) { // found matched chars
+ String prefix = line.substring(0, prevFmc).trim();
+ rv.addAll(Arrays.asList(prefix.split("\\s+")));//$NON-NLS-1$
+
+ rv.add(line.substring(prevFmc, emc+1));
+
+ // recursion
+ rv.addAll(tokenize(line.substring(emc+1).trim()));
+ }
+ else {
+ rv.addAll(Arrays.asList(line.split("\\s+")));//$NON-NLS-1$
+ }
+ return rv;
+ }
+
+ /**
+ * @param line
* @param includes
*/
private void parseLineForIncludePaths(String line, List includes) {

Back to the top