diff options
author | hjk <hjk121@nokiamail.com> | 2014-02-05 10:43:21 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@digia.com> | 2014-02-19 09:19:28 +0100 |
commit | c68ebeed2e47c7a78d790bb732a080edaf07d9ba (patch) | |
tree | ab861674989f5b4aaf8f8f70275d53a2e075b0f2 /src/libs/utils/consoleprocess_unix.cpp | |
parent | a0d29eeb03cfe51ed929a83374c18e3301fefdaf (diff) | |
download | qt-creator-c68ebeed2e47c7a78d790bb732a080edaf07d9ba.tar.gz |
QtcProcess: Introduce a QtcProcess::Arguments class
This is used to get a platform-agnostic handle on "command line
arguments". It essentially wraps a single QString on Windows,
and a QStringList everywhere else.
As a consequence, several occurrences of #ifdef Q_OS_*
can be removed from the codebase.
Change-Id: Ic93118c1bd0bce0ebb58f416d395dbaebb861772
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Diffstat (limited to 'src/libs/utils/consoleprocess_unix.cpp')
-rw-r--r-- | src/libs/utils/consoleprocess_unix.cpp | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/src/libs/utils/consoleprocess_unix.cpp b/src/libs/utils/consoleprocess_unix.cpp index 331e65a0ae..cc9474dbb5 100644 --- a/src/libs/utils/consoleprocess_unix.cpp +++ b/src/libs/utils/consoleprocess_unix.cpp @@ -75,7 +75,8 @@ bool ConsoleProcess::start(const QString &program, const QString &args) return false; QtcProcess::SplitError perr; - QStringList pargs = QtcProcess::prepareArgs(args, &perr, &d->m_environment, &d->m_workingDir); + QtcProcess::Arguments pargs = QtcProcess::prepareArgs(args, &perr, HostOsInfo::hostOs(), + &d->m_environment, &d->m_workingDir); QString pcmd; if (perr == QtcProcess::SplitOk) { pcmd = program; @@ -91,12 +92,15 @@ bool ConsoleProcess::start(const QString &program, const QString &args) return false; } pcmd = QLatin1String("/bin/sh"); - pargs << QLatin1String("-c") << (QtcProcess::quoteArg(program) + QLatin1Char(' ') + args); + pargs = QtcProcess::Arguments::createUnixArgs(QStringList() + << QLatin1String("-c") + << (QtcProcess::quoteArg(program) + QLatin1Char(' ') + args)); } QtcProcess::SplitError qerr; - QStringList xtermArgs = QtcProcess::prepareArgs(terminalEmulator(d->m_settings), &qerr, - &d->m_environment, &d->m_workingDir); + QtcProcess::Arguments xtermArgs = QtcProcess::prepareArgs(terminalEmulator(d->m_settings), &qerr, + HostOsInfo::hostOs(), + &d->m_environment, &d->m_workingDir); if (qerr != QtcProcess::SplitOk) { emit processError(qerr == QtcProcess::BadQuoting ? tr("Quoting error in terminal command.") @@ -134,23 +138,23 @@ bool ConsoleProcess::start(const QString &program, const QString &args) } } - if (Utils::HostOsInfo::isMacHost()) { - xtermArgs << (QCoreApplication::applicationDirPath() - + QLatin1String("/../Resources/qtcreator_process_stub")); - } else { - xtermArgs << (QCoreApplication::applicationDirPath() - + QLatin1String("/qtcreator_process_stub")); - } - xtermArgs + QString stubPath = QCoreApplication::applicationDirPath(); + if (Utils::HostOsInfo::isMacHost()) + stubPath.append(QLatin1String("/../Resources/qtcreator_process_stub")); + else + stubPath.append(QLatin1String("/qtcreator_process_stub")); + + QStringList allArgs = xtermArgs.toUnixArgs(); + allArgs << stubPath << modeOption(d->m_mode) << d->m_stubServer.fullServerName() << msgPromptToClose() << workingDirectory() << (d->m_tempFile ? d->m_tempFile->fileName() : QString()) - << pcmd << pargs; + << pcmd << pargs.toUnixArgs(); - QString xterm = xtermArgs.takeFirst(); - d->m_process.start(xterm, xtermArgs); + QString xterm = allArgs.takeFirst(); + d->m_process.start(xterm, allArgs); if (!d->m_process.waitForStarted()) { stubServerShutdown(); emit processError(tr("Cannot start the terminal emulator '%1', change the setting in the " |