From 9b0aa9dc4c82410004ed5079e81ace31d48ce757 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Wed, 11 Apr 2012 11:00:55 +0300 Subject: [PATCH] normalize the process arguments to Normalization Form D on mac MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit QFile::encodeName() does this for us + simplifies the code a bit Change-Id: Id2ca2615e20408229dd021c26587fefd60365352 Reviewed-by: Morten Johan Sørvig Reviewed-by: João Abecasis Reviewed-by: Konstantin Ritt Reviewed-by: Thiago Macieira --- src/corelib/io/qprocess_unix.cpp | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp index 17dae7b..d3c2cd9 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 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(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('/'))) { -- 2.7.4