From b1291ecfd0ab31c41783feb645c98ce42fa87aae Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Thu, 21 Jan 2010 12:33:34 +0100 Subject: [PATCH] trk: Add support for command line arguments in trk::Launcher. Initial-patch-by: Shane Kearns <shane.kearns@sosco.com> --- src/shared/trk/launcher.cpp | 41 +++++++++++++++++++++++++++++-------- 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 7eb8d7d1fbe..d8f9e0d2c88 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) { @@ -651,6 +659,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(); @@ -658,12 +686,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 93a28217168..67e94977ede 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); -- GitLab