summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2016-07-14 18:10:50 +0200
committerOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2016-09-29 13:47:36 +0000
commit1a40f89d2d663c7cbf68e46cae6ced5114ec2e19 (patch)
treed97d5a79c3303150f8f93b981bf1780f59972745
parentc33b56e9b111da6528d4cbe69a3b6d9207c33cc6 (diff)
downloadqttools-1a40f89d2d663c7cbf68e46cae6ced5114ec2e19.tar.gz
terminate when command called by system() got SIGINT or SIGQUIT
this doesn't actually do anything in lupdate; just syncing up. Change-Id: I5e5df9f6d136601f0f36a8d645f90a1cab9995ad Reviewed-by: Lars Knoll <lars.knoll@qt.io> (cherry picked from qtbase/f8ef7e1d2619e6d394c57561bb275767f0517b24) Reviewed-by: Jake Petroules <jake.petroules@qt.io>
-rw-r--r--src/linguist/shared/qmakebuiltins.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/linguist/shared/qmakebuiltins.cpp b/src/linguist/shared/qmakebuiltins.cpp
index 4c12a30e3..fb2e2854e 100644
--- a/src/linguist/shared/qmakebuiltins.cpp
+++ b/src/linguist/shared/qmakebuiltins.cpp
@@ -62,6 +62,8 @@
#include <utime.h>
#include <errno.h>
#include <unistd.h>
+#include <signal.h>
+#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/utsname.h>
#else
@@ -1506,9 +1508,14 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
runProcess(&proc, args.at(0).toQString(m_tmp2));
return returnBool(proc.exitStatus() == QProcess::NormalExit && proc.exitCode() == 0);
#else
- return returnBool(system((QLatin1String("cd ")
- + IoUtils::shellQuote(QDir::toNativeSeparators(currentDirectory()))
- + QLatin1String(" && ") + args.at(0)).toLocal8Bit().constData()) == 0);
+ int ec = system((QLatin1String("cd ")
+ + IoUtils::shellQuote(QDir::toNativeSeparators(currentDirectory()))
+ + QLatin1String(" && ") + args.at(0)).toLocal8Bit().constData());
+# ifdef Q_OS_UNIX
+ if (ec != -1 && WIFSIGNALED(ec) && (WTERMSIG(ec) == SIGQUIT || WTERMSIG(ec) == SIGINT))
+ raise(WTERMSIG(ec));
+# endif
+ return returnBool(ec == 0);
#endif
#else
return ReturnTrue;