From c1ddd7147293341df0785c00b6e979825581ca74 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Tue, 28 Jul 2009 09:10:12 +0200
Subject: [PATCH] CDB: Start up correctly if no working directory is specified.

---
 src/plugins/debugger/cdb/cdbdebugengine.cpp | 22 ++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/plugins/debugger/cdb/cdbdebugengine.cpp b/src/plugins/debugger/cdb/cdbdebugengine.cpp
index bccad9cc7a5..910a915b713 100644
--- a/src/plugins/debugger/cdb/cdbdebugengine.cpp
+++ b/src/plugins/debugger/cdb/cdbdebugengine.cpp
@@ -635,7 +635,12 @@ bool CdbDebugEngine::startDebuggerWithExecutable(DebuggerStartMode sm, QString *
         imagePath += QLatin1Char(';');
         imagePath += m_d->m_baseImagePath;
     }
-    m_d->m_cif.debugSymbols->SetImagePathWide(reinterpret_cast<PCWSTR>(imagePath.utf16()));
+    HRESULT hr = m_d->m_cif.debugSymbols->SetImagePathWide(reinterpret_cast<PCWSTR>(imagePath.utf16()));
+    if (FAILED(hr)) {
+        *errorMessage = tr("Unable to set the image path to %1: %2").arg(imagePath, msgComFailed("SetImagePathWide", hr));
+        return false;
+    }
+
     if (debugCDB)
         qDebug() << Q_FUNC_INFO <<'\n' << filename << imagePath;
 
@@ -653,12 +658,15 @@ bool CdbDebugEngine::startDebuggerWithExecutable(DebuggerStartMode sm, QString *
         envData = Core::Utils::AbstractProcess::createWinEnvironment(Core::Utils::AbstractProcess::fixWinEnvironment(sp->environment));
         env = reinterpret_cast<PCWSTR>(envData.data());
     }
-    const HRESULT hr = m_d->m_cif.debugClient->CreateProcess2Wide(NULL,
-                                                               reinterpret_cast<PWSTR>(const_cast<ushort *>(cmd.utf16())),
-                                                               &dbgopts,
-                                                               sizeof(dbgopts),
-                                                               reinterpret_cast<PCWSTR>(sp->workingDir.utf16()),
-                                                               env);
+    // The working directory cannot be empty.
+    PCWSTR workingDirC = 0;
+    const QString workingDir = sp->workingDir.isEmpty() ? QString() : QDir::toNativeSeparators(sp->workingDir);
+    if (!workingDir.isEmpty())
+        workingDirC = workingDir.utf16();
+    hr = m_d->m_cif.debugClient->CreateProcess2Wide(NULL,
+                                                    reinterpret_cast<PWSTR>(const_cast<ushort *>(cmd.utf16())),
+                                                    &dbgopts, sizeof(dbgopts),
+                                                    workingDirC, env);
     if (FAILED(hr)) {
         *errorMessage = tr("Unable to create a process '%1': %2").arg(cmd, msgDebugEngineComResult(hr));
         m_d->m_debuggerManagerAccess->notifyInferiorExited();
-- 
GitLab