diff options
author | Jake Petroules <jake.petroules@qt.io> | 2016-12-14 20:13:29 -0800 |
---|---|---|
committer | Jake Petroules <jake.petroules@qt.io> | 2016-12-16 09:14:24 +0000 |
commit | b9f56751cb926b6b4a6dd8ba2524394dcade9eef (patch) | |
tree | 9450b9d32941f470d51d02980c75b32cae6121b6 /src/corelib/io/qprocess_unix.cpp | |
parent | 66c2b87547e29a8c31377b6cac959a7d3bd6076b (diff) |
Introduce a configure option for QProcessEnvironment
This decouples QProcess and QProcessEnvironment, since the latter may
actually be available on platforms where the former is not.
Change-Id: I3dc799ffdf94486b64143ed01a369897fff44a96
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.cpp | 73 |
1 files changed, 40 insertions, 33 deletions
diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp index b39816dd7d..39ec370d9c 100644 --- a/src/corelib/io/qprocess_unix.cpp +++ b/src/corelib/io/qprocess_unix.cpp @@ -41,9 +41,7 @@ //#define QPROCESS_DEBUG #include "qdebug.h" -#ifndef QT_NO_PROCESS - -#if defined QPROCESS_DEBUG +#if QT_CONFIG(process) && defined(QPROCESS_DEBUG) #include "private/qtools_p.h" #include <ctype.h> @@ -114,10 +112,47 @@ QT_END_NAMESPACE #include <errno.h> #include <stdlib.h> #include <string.h> + +#if QT_CONFIG(process) #include <forkfd.h> +#endif QT_BEGIN_NAMESPACE +#if QT_CONFIG(processenvironment) + +QT_BEGIN_INCLUDE_NAMESPACE +#if defined(Q_OS_MACOS) +# include <crt_externs.h> +# define environ (*_NSGetEnviron()) +#else +extern char **environ; +#endif +QT_END_INCLUDE_NAMESPACE + +QProcessEnvironment QProcessEnvironment::systemEnvironment() +{ + QProcessEnvironment env; +#if !defined(QT_PLATFORM_UIKIT) + const char *entry; + for (int count = 0; (entry = environ[count]); ++count) { + const char *equal = strchr(entry, '='); + if (!equal) + continue; + + QByteArray name(entry, equal - entry); + QByteArray value(equal + 1); + env.d->hash.insert(QProcessEnvironmentPrivate::Key(name), + QProcessEnvironmentPrivate::Value(value)); + } +#endif + return env; +} + +#endif // QT_CONFIG(processenvironment) + +#if QT_CONFIG(process) + // POSIX requires PIPE_BUF to be 512 or larger // so we will use 512 static const int errorBufferMax = 512; @@ -310,34 +345,6 @@ bool QProcessPrivate::openChannel(Channel &channel) } } -QT_BEGIN_INCLUDE_NAMESPACE -#if defined(Q_OS_MACX) -# include <crt_externs.h> -# define environ (*_NSGetEnviron()) -#else - extern char **environ; -#endif -QT_END_INCLUDE_NAMESPACE - -QProcessEnvironment QProcessEnvironment::systemEnvironment() -{ - QProcessEnvironment env; -#if !defined(QT_PLATFORM_UIKIT) - const char *entry; - for (int count = 0; (entry = environ[count]); ++count) { - const char *equal = strchr(entry, '='); - if (!equal) - continue; - - QByteArray name(entry, equal - entry); - QByteArray value(equal + 1); - env.d->hash.insert(QProcessEnvironmentPrivate::Key(name), - QProcessEnvironmentPrivate::Value(value)); - } -#endif - return env; -} - static char **_q_dupEnvironment(const QProcessEnvironmentPrivate::Hash &environment, int *envc) { *envc = 0; @@ -1044,6 +1051,6 @@ bool QProcessPrivate::startDetached(const QString &program, const QStringList &a return success; } -QT_END_NAMESPACE - #endif // QT_NO_PROCESS + +QT_END_NAMESPACE |