summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Stenger <christian.stenger@qt.io>2018-11-20 15:19:32 +0100
committerChristian Stenger <christian.stenger@qt.io>2018-11-21 14:35:29 +0000
commit04b20a1a46818b84efbfb11d8cb3c6a8613f608f (patch)
tree9b4c4ee13166700cb9e26ee7fa97f591ac15e336
parentc76411a55eeffd620182473d3e2421e6870937f2 (diff)
downloadqt-creator-04b20a1a46818b84efbfb11d8cb3c6a8613f608f.tar.gz
Android: Fix uploading file on Windows
Quoting of arguments on Windows behaves differently depending on the used start() overload of QProcess. Setting the program and arguments before calling start() with only the QIODevice::OpenMode parameter allows to preserve the wanted quoting. Task-number: QTCREATORBUG-21547 Done-with: Oliver Wolff <oliver.wolff@qt.io> Change-Id: I644ea0737d51d6114facb19a0ad70f10aeb79f2c Reviewed-by: Orgad Shaneh <orgads@gmail.com> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r--src/libs/utils/synchronousprocess.cpp8
-rw-r--r--src/plugins/android/androidrunnerworker.cpp2
2 files changed, 8 insertions, 2 deletions
diff --git a/src/libs/utils/synchronousprocess.cpp b/src/libs/utils/synchronousprocess.cpp
index f9ab96eb47..a153e6ac91 100644
--- a/src/libs/utils/synchronousprocess.cpp
+++ b/src/libs/utils/synchronousprocess.cpp
@@ -455,7 +455,11 @@ SynchronousProcessResponse SynchronousProcess::run(const QString &binary,
// executable cannot be found in the path. Do not start the
// event loop in that case.
d->m_binary = binary;
- d->m_process.start(binary, args, writeData.isEmpty() ? QIODevice::ReadOnly : QIODevice::ReadWrite);
+ // using QProcess::start() and passing program, args and OpenMode results in a different
+ // quoting of arguments than using QProcess::setArguments() beforehand and calling start()
+ // only with the OpenMode
+ d->m_process.setProgram(binary);
+ d->m_process.setArguments(args);
connect(&d->m_process, &QProcess::started, this, [this, writeData] {
if (!writeData.isEmpty()) {
int pos = 0;
@@ -469,6 +473,8 @@ SynchronousProcessResponse SynchronousProcess::run(const QString &binary,
}
d->m_process.closeWriteChannel();
});
+ d->m_process.start(writeData.isEmpty() ? QIODevice::ReadOnly : QIODevice::ReadWrite);
+
if (!d->m_startFailure) {
d->m_timer.start();
if (isGuiThread())
diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp
index 78cc6ffcff..17004b1035 100644
--- a/src/plugins/android/androidrunnerworker.cpp
+++ b/src/plugins/android/androidrunnerworker.cpp
@@ -278,7 +278,7 @@ bool AndroidRunnerWorker::uploadFile(const QString &from, const QString &to, con
if (!f.open(QIODevice::ReadOnly))
return false;
runAdb({"shell", "run-as", m_packageName, "rm", to});
- auto res = runAdb({"shell", "run-as", m_packageName, "sh", "-c", QString("'cat > %1'").arg(to)}, 60, f.readAll());
+ auto res = runAdb({"shell", "run-as", m_packageName, QString("sh -c 'cat > %1'").arg(to)}, 60, f.readAll());
if (!res)
return false;
return runAdb({"shell", "run-as", m_packageName, "chmod", flags, to});