diff options
Diffstat (limited to 'src/corelib/io/qprocess.h')
-rw-r--r-- | src/corelib/io/qprocess.h | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/src/corelib/io/qprocess.h b/src/corelib/io/qprocess.h index 4fa1037b38..34724a6794 100644 --- a/src/corelib/io/qprocess.h +++ b/src/corelib/io/qprocess.h @@ -1,9 +1,11 @@ // Copyright (C) 2016 The Qt Company Ltd. +// Copyright (C) 2023 Intel Corporation. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef QPROCESS_H #define QPROCESS_H +#include <QtCore/qcompare.h> #include <QtCore/qiodevice.h> #include <QtCore/qstringlist.h> #include <QtCore/qshareddata.h> @@ -40,9 +42,11 @@ public: void swap(QProcessEnvironment &other) noexcept { d.swap(other.d); } +#if QT_CORE_REMOVED_SINCE(6, 8) bool operator==(const QProcessEnvironment &other) const; inline bool operator!=(const QProcessEnvironment &other) const - { return !(*this == other); } + { return !operator==(other); } +#endif bool isEmpty() const; [[nodiscard]] bool inheritsFromParent() const; @@ -62,6 +66,9 @@ public: static QProcessEnvironment systemEnvironment(); private: + friend Q_CORE_EXPORT bool comparesEqual(const QProcessEnvironment &lhs, + const QProcessEnvironment &rhs); + Q_DECLARE_EQUALITY_COMPARABLE(QProcessEnvironment) friend class QProcessPrivate; friend class QProcessEnvironmentPrivate; QSharedDataPointer<QProcessEnvironmentPrivate> d; @@ -173,6 +180,29 @@ public: #if defined(Q_OS_UNIX) || defined(Q_QDOC) std::function<void(void)> childProcessModifier() const; void setChildProcessModifier(const std::function<void(void)> &modifier); + Q_NORETURN void failChildProcessModifier(const char *description, int error = 0) noexcept; + + enum class UnixProcessFlag : quint32 { + ResetSignalHandlers = 0x0001, // like POSIX_SPAWN_SETSIGDEF + IgnoreSigPipe = 0x0002, + // some room if we want to add IgnoreSigHup or so + CloseFileDescriptors = 0x0010, + UseVFork = 0x0020, // like POSIX_SPAWN_USEVFORK + CreateNewSession = 0x0040, // like POSIX_SPAWN_SETSID + DisconnectControllingTerminal = 0x0080, + ResetIds = 0x0100, // like POSIX_SPAWN_RESETIDS + }; + Q_DECLARE_FLAGS(UnixProcessFlags, UnixProcessFlag) + struct UnixProcessParameters + { + UnixProcessFlags flags = {}; + int lowestFileDescriptorToClose = 0; + + quint32 _reserved[6] {}; + }; + UnixProcessParameters unixProcessParameters() const noexcept; + void setUnixProcessParameters(const UnixProcessParameters ¶ms); + void setUnixProcessParameters(UnixProcessFlags flagsOnly); #endif QString workingDirectory() const; @@ -256,6 +286,10 @@ private: Q_PRIVATE_SLOT(d_func(), void _q_processDied()) }; +#ifdef Q_OS_UNIX +Q_DECLARE_OPERATORS_FOR_FLAGS(QProcess::UnixProcessFlags) +#endif + #endif // QT_CONFIG(process) QT_END_NAMESPACE |