summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qprocess_unix.cpp
diff options
context:
space:
mode:
authorKonstantin Ritt <ritt.ks@gmail.com>2012-04-11 11:00:55 +0300
committerQt by Nokia <qt-info@nokia.com>2012-06-06 02:03:08 +0200
commit9b0aa9dc4c82410004ed5079e81ace31d48ce757 (patch)
treedaef853ffb463e27df89acd3bf5e08e996aca29f /src/corelib/io/qprocess_unix.cpp
parentb24bf21fcbee73c9af87b60f890d741c31066fa9 (diff)
normalize the process arguments to Normalization Form D on mac
QFile::encodeName() does this for us + simplifies the code a bit Change-Id: Id2ca2615e20408229dd021c26587fefd60365352 Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com> Reviewed-by: João Abecasis <joao.abecasis@nokia.com> Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/io/qprocess_unix.cpp')
-rw-r--r--src/corelib/io/qprocess_unix.cpp24
1 files changed, 6 insertions, 18 deletions
diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp
index 17dae7b6ca..d3c2cd9fc0 100644
--- a/src/corelib/io/qprocess_unix.cpp
+++ b/src/corelib/io/qprocess_unix.cpp
@@ -578,7 +578,7 @@ void QProcessPrivate::startProcess()
QByteArray encodedProgramName = QFile::encodeName(program);
#ifdef Q_OS_MAC
// allow invoking of .app bundles on the Mac.
- QFileInfo fileInfo(QString::fromUtf8(encodedProgramName.constData()));
+ QFileInfo fileInfo(program);
if (encodedProgramName.endsWith(".app") && fileInfo.isDir()) {
QCFType<CFURLRef> url = CFURLCreateWithFileSystemPath(0,
QCFString(fileInfo.absoluteFilePath()),
@@ -593,7 +593,7 @@ void QProcessPrivate::startProcess()
}
if (url) {
QCFString str = CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle);
- encodedProgramName += "/Contents/MacOS/" + static_cast<QString>(str).toUtf8();
+ encodedProgramName += "/Contents/MacOS/" + QCFString::toQString(str).toUtf8();
}
}
#endif
@@ -603,15 +603,8 @@ void QProcessPrivate::startProcess()
argv[0] = dupProgramName;
// Add every argument to the list
- for (int i = 0; i < arguments.count(); ++i) {
- QString arg = arguments.at(i);
-#ifdef Q_OS_MAC
- // Mac OS X uses UTF8 for exec, regardless of the system locale.
- argv[i + 1] = ::strdup(arg.toUtf8().constData());
-#else
- argv[i + 1] = ::strdup(arg.toLocal8Bit().constData());
-#endif
- }
+ for (int i = 0; i < arguments.count(); ++i)
+ argv[i + 1] = ::strdup(QFile::encodeName(arguments.at(i)).constData());
// Duplicate the environment.
int envc = 0;
@@ -1375,13 +1368,8 @@ bool QProcessPrivate::startDetached(const QString &program, const QStringList &a
}
char **argv = new char *[arguments.size() + 2];
- for (int i = 0; i < arguments.size(); ++i) {
-#ifdef Q_OS_MAC
- argv[i + 1] = ::strdup(arguments.at(i).toUtf8().constData());
-#else
- argv[i + 1] = ::strdup(arguments.at(i).toLocal8Bit().constData());
-#endif
- }
+ for (int i = 0; i < arguments.size(); ++i)
+ argv[i + 1] = ::strdup(QFile::encodeName(arguments.at(i)).constData());
argv[arguments.size() + 1] = 0;
if (!program.contains(QLatin1Char('/'))) {