diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2010-01-21 12:33:34 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2010-01-21 15:13:03 +0100 |
commit | 670647b8207bf4a35b93ce23f47b4e5cde025a93 (patch) | |
tree | bf75c6bc34834db4dfc6ec5fe7c3a126417dfcde | |
parent | e10a07d8b1112aceb88f100993dcce7e9c9a9d99 (diff) | |
download | qt-creator-670647b8207bf4a35b93ce23f47b4e5cde025a93.tar.gz |
trk: Add support for command line arguments in trk::Launcher.
Initial-patch-by: Shane Kearns <shane.kearns@sosco.com>
-rw-r--r-- | src/shared/trk/launcher.cpp | 41 | ||||
-rw-r--r-- | src/shared/trk/launcher.h | 4 |
2 files changed, 36 insertions, 9 deletions
diff --git a/src/shared/trk/launcher.cpp b/src/shared/trk/launcher.cpp index 8a78456477..24b114ab65 100644 --- a/src/shared/trk/launcher.cpp +++ b/src/shared/trk/launcher.cpp @@ -64,6 +64,7 @@ struct LauncherPrivate { CopyState m_copyState; QString m_fileName; + QStringList m_commandLineArgs; QString m_installFileName; int m_verbose; Launcher::Actions m_startupActions; @@ -146,6 +147,11 @@ void Launcher::setInstallFileName(const QString &name) d->m_installFileName = name; } +void Launcher::setCommandLineArgs(const QStringList &args) +{ + d->m_commandLineArgs = args; +} + void Launcher::setSerialFrame(bool b) { d->m_device->setSerialFrame(b); @@ -171,8 +177,10 @@ bool Launcher::startServer(QString *errorMessage) { errorMessage->clear(); if (d->m_verbose) { - const QString msg = QString::fromLatin1("Port=%1 Executable=%2 Package=%3 Remote Package=%4 Install file=%5") - .arg(d->m_trkServerName, d->m_fileName, d->m_copyState.sourceFileName, d->m_copyState.destinationFileName, d->m_installFileName); + const QString msg = QString::fromLatin1("Port=%1 Executable=%2 Arguments=%3 Package=%4 Remote Package=%5 Install file=%6") + .arg(d->m_trkServerName, d->m_fileName, + d->m_commandLineArgs.join(QString(QLatin1Char(' '))), + d->m_copyState.sourceFileName, d->m_copyState.destinationFileName, d->m_installFileName); logMessage(msg); } if (d->m_startupActions & ActionCopy) { @@ -647,6 +655,26 @@ void Launcher::handleInstallPackageFinished(const TrkResult &result) } } +QByteArray Launcher::startProcessMessage(const QString &executable, + const QStringList &arguments) +{ + // It's not started yet + QByteArray ba; + appendShort(&ba, 0, TargetByteOrder); // create new process + appendByte(&ba, 0); // options - currently unused + if(arguments.isEmpty()) { + appendString(&ba, executable.toLocal8Bit(), TargetByteOrder); + return ba; + } + // Append full command line as one string (leading length information). + QByteArray commandLineBa; + commandLineBa.append(executable.toLocal8Bit()); + commandLineBa.append('\0'); + commandLineBa.append(arguments.join(QString(QLatin1Char(' '))).toLocal8Bit()); + appendString(&ba, commandLineBa, TargetByteOrder); + return ba; +} + void Launcher::startInferiorIfNeeded() { emit startingApplication(); @@ -654,12 +682,7 @@ void Launcher::startInferiorIfNeeded() logMessage("Process already 'started'"); return; } - // It's not started yet - QByteArray ba; - appendByte(&ba, 0); // ? - appendByte(&ba, 0); // create new process - appendByte(&ba, 0); // ? - appendString(&ba, d->m_fileName.toLocal8Bit(), TargetByteOrder); - d->m_device->sendTrkMessage(TrkCreateItem, TrkCallback(this, &Launcher::handleCreateProcess), ba); // Create Item + d->m_device->sendTrkMessage(TrkCreateItem, TrkCallback(this, &Launcher::handleCreateProcess), + startProcessMessage(d->m_fileName, d->m_commandLineArgs)); // Create Item } } // namespace trk diff --git a/src/shared/trk/launcher.h b/src/shared/trk/launcher.h index 538d367e74..764264c044 100644 --- a/src/shared/trk/launcher.h +++ b/src/shared/trk/launcher.h @@ -82,6 +82,7 @@ public: void setFileName(const QString &name); void setCopyFileName(const QString &srcName, const QString &dstName); void setInstallFileName(const QString &name); + void setCommandLineArgs(const QStringList &args); bool startServer(QString *errorMessage); void setVerbose(int v); void setSerialFrame(bool b); @@ -95,6 +96,9 @@ public: // becomes valid after successful execution of ActionPingOnly QString deviceDescription(unsigned verbose = 0u) const; + static QByteArray startProcessMessage(const QString &executable, + const QStringList &arguments); + signals: void copyingStarted(); void canNotConnect(const QString &errorMessage); |