From ad008b9b57c72c1a28d7f2e43899f231d4f16226 Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@nokia.com>
Date: Wed, 6 Oct 2010 16:11:07 +0200
Subject: [PATCH] Environment: Disable escaping when expanding variables

This breaks too much on windows.

Reviewed-by: dt
---
 src/libs/utils/environment.cpp                | 23 ++++---------------
 src/libs/utils/pathchooser.cpp                |  4 +---
 .../projectexplorer/abstractprocessstep.cpp   |  5 ++--
 3 files changed, 7 insertions(+), 25 deletions(-)

diff --git a/src/libs/utils/environment.cpp b/src/libs/utils/environment.cpp
index 7ec417030fa..b21fcf9ab63 100644
--- a/src/libs/utils/environment.cpp
+++ b/src/libs/utils/environment.cpp
@@ -373,20 +373,15 @@ QString Environment::joinArgumentList(const QStringList &arguments)
     return result;
 }
 
-enum State { BASE, VARIABLE, OPTIONALVARIABLEBRACE, STRING, STRING_ESCAPE, ESCAPE };
+enum State { BASE, VARIABLE, OPTIONALVARIABLEBRACE, STRING };
 
 /** Expand environment variables in a string.
  *
  * Environment variables are accepted in the following forms:
  * $SOMEVAR, ${SOMEVAR} and %SOMEVAR%.
  *
- * The following escape sequences are supported:
- * "\$", "\\" and "\"" which will be replaced by '$', '\' and '%'
- * respectively.
- *
  * Strings enclosed in '"' characters do not get varaibles
- * substituted. Escape codes are processed though.
- *
+ * substituted.
  */
 QString Environment::expandVariables(const QString &input) const
 {
@@ -399,9 +394,7 @@ QString Environment::expandVariables(const QString &input) const
     for (int i = 0; i < length; ++i) {
         QChar c = input.at(i);
         if (state == BASE) {
-            if (c == '\\') {
-                state = ESCAPE;
-            } else if (c == '$') {
+            if (c == '$') {
                 state = OPTIONALVARIABLEBRACE;
                 variable.clear();
                 endVariable = QChar(0);
@@ -433,20 +426,12 @@ QString Environment::expandVariables(const QString &input) const
                 variable = c;
             state = VARIABLE;
         } else if (state == STRING) {
-            if (c == '\\') {
-                state = STRING_ESCAPE;
-            } else if (c == '\"') {
+            if (c == '\"') {
                 state = BASE;
                 result += c;
             } else {
                 result += c;
             }
-        } else if (state == STRING_ESCAPE) {
-            result += c;
-            state = STRING;
-        } else if (state == ESCAPE){
-            result += c;
-            state = BASE;
         }
     }
     if (state == VARIABLE)
diff --git a/src/libs/utils/pathchooser.cpp b/src/libs/utils/pathchooser.cpp
index 331e51ddfa8..844353fddf5 100644
--- a/src/libs/utils/pathchooser.cpp
+++ b/src/libs/utils/pathchooser.cpp
@@ -110,9 +110,7 @@ QString PathChooserPrivate::expandedPath(const QString &input) const
 {
     if (input.isEmpty())
         return input;
-    // Environment does \-expansion, too.
-    const QString nativeInput = QDir::fromNativeSeparators(input);
-    const QString path = QDir::fromNativeSeparators(m_environment.expandVariables(nativeInput));
+    const QString path = QDir::fromNativeSeparators(m_environment.expandVariables(input));
     if (path.isEmpty())
         return path;
 
diff --git a/src/plugins/projectexplorer/abstractprocessstep.cpp b/src/plugins/projectexplorer/abstractprocessstep.cpp
index 9949ef30452..9b0786f7e82 100644
--- a/src/plugins/projectexplorer/abstractprocessstep.cpp
+++ b/src/plugins/projectexplorer/abstractprocessstep.cpp
@@ -151,13 +151,12 @@ void AbstractProcessStep::run(QFutureInterface<bool> &fi)
         fi.reportResult(true);
         return;
     }
-    QString workDir = m_environment.expandVariables(m_workingDirectory);
-    QDir wd(workDir);
+    QDir wd(m_environment.expandVariables(m_workingDirectory));
     if (!wd.exists())
         wd.mkpath(wd.absolutePath());
 
     m_process = new QProcess();
-    m_process->setWorkingDirectory(workDir);
+    m_process->setWorkingDirectory(wd.absolutePath());
     m_process->setEnvironment(m_environment.toStringList());
 
     connect(m_process, SIGNAL(readyReadStandardOutput()),
-- 
GitLab