From 6a2f91110e8a8d69397c764dbce8f77261a0f6f8 Mon Sep 17 00:00:00 2001 From: Mikhail Sennikovsky Date: Thu, 3 May 2007 16:24:54 +0000 Subject: [PATCH] Fix for [Bug 185091] Include paths are not quoted when adding from "Paths and symbols" tab --- .../dataprovider/BuildEntryStorage.java | 50 ++++++++++++++++--- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/BuildEntryStorage.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/BuildEntryStorage.java index 6a950b75aee..53676a091d0 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/BuildEntryStorage.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/BuildEntryStorage.java @@ -296,21 +296,55 @@ public class BuildEntryStorage extends AbstractEntryStorage { } private String entryValueToOptionStringValue(IOption option, ICLanguageSettingEntry entry){ + String result; + boolean checkQuote = true; if(entry.getKind() == ICLanguageSettingEntry.MACRO && entry.getValue().length() > 0){ - return new StringBuffer(entry.getName()).append('=').append(entry.getValue()).toString(); + result = new StringBuffer(entry.getName()).append('=').append(entry.getValue()).toString(); } else if(entry instanceof ICLanguageSettingPathEntry){ IOptionPathConverter converter = fLangData.getTool().getOptionPathConverter(); if(converter instanceof IReverseOptionPathConverter){ - return ((IReverseOptionPathConverter)converter).convertToOptionValue(entry, option, fLangData.getTool()); - } - ICLanguageSettingPathEntry pathEntry = (ICLanguageSettingPathEntry)entry; - if(pathEntry.isValueWorkspacePath()){ - return ManagedBuildManager.fullPathToLocation(pathEntry.getValue()); + result = ((IReverseOptionPathConverter)converter).convertToOptionValue(entry, option, fLangData.getTool()); + checkQuote = false; + } else { + ICLanguageSettingPathEntry pathEntry = (ICLanguageSettingPathEntry)entry; + if(pathEntry.isValueWorkspacePath()){ + result = ManagedBuildManager.fullPathToLocation(pathEntry.getValue()); + } else { + result = entry.getName(); + } } + } else { + result = entry.getName(); } - return entry.getName(); + + if(checkQuote){ + result = doubleQuotePath(result); + } + return result; + } + + private String doubleQuotePath(String pathName) { + /* Trim */ + pathName = pathName.trim(); + + /* Check if path is already double-quoted */ + boolean bStartsWithQuote = pathName.indexOf('"') == 0; + boolean bEndsWithQuote = pathName.lastIndexOf('"') == pathName.length() - 1; + + /* Check for spaces, backslashes or macros */ + int i = pathName.indexOf(' ') + pathName.indexOf('\\') //$NON-NLS-1$ //$NON-NLS-2$ + + pathName.indexOf("${"); //$NON-NLS-1$ + + /* If indexof didn't fail all three times, double-quote path */ + if (i != -3) { + if (!bStartsWithQuote) + pathName = "\"" + pathName; //$NON-NLS-1$ + if (!bEndsWithQuote) + pathName = pathName + "\""; //$NON-NLS-1$ + } + + return pathName; } - public static String[] macroNameValueFromValue(String value){ String nv[] = new String[2];