summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2010-01-21 12:33:34 +0100
committerFriedemann Kleint <Friedemann.Kleint@nokia.com>2010-01-21 15:13:03 +0100
commit670647b8207bf4a35b93ce23f47b4e5cde025a93 (patch)
treebf75c6bc34834db4dfc6ec5fe7c3a126417dfcde
parente10a07d8b1112aceb88f100993dcce7e9c9a9d99 (diff)
downloadqt-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.cpp41
-rw-r--r--src/shared/trk/launcher.h4
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);