Coverage Report

Created: 2026-01-25 07:18

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/qtbase/src/dbus/qdbusreply.h
Line
Count
Source
1
// Copyright (C) 2016 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
// Qt-Security score:significant reason:default
4
5
#ifndef QDBUSREPLY_H
6
#define QDBUSREPLY_H
7
8
#include <QtDBus/qtdbusglobal.h>
9
#include <QtCore/qvariant.h>
10
11
#include <QtDBus/qdbusmessage.h>
12
#include <QtDBus/qdbuserror.h>
13
#include <QtDBus/qdbusextratypes.h>
14
#include <QtDBus/qdbuspendingreply.h>
15
16
#ifndef QT_NO_DBUS
17
18
QT_BEGIN_NAMESPACE
19
20
21
Q_DBUS_EXPORT void qDBusReplyFill(const QDBusMessage &reply, QDBusError &error, QVariant &data);
22
23
template<typename T>
24
class QDBusReply
25
{
26
    typedef T Type;
27
public:
28
    // Rule Of Zero applies!
29
30
    inline QDBusReply(const QDBusMessage &reply)
31
0
    {
32
0
        *this = reply;
33
0
    }
Unexecuted instantiation: QDBusReply<QString>::QDBusReply(QDBusMessage const&)
Unexecuted instantiation: QDBusReply<QList<QString> >::QDBusReply(QDBusMessage const&)
Unexecuted instantiation: QDBusReply<bool>::QDBusReply(QDBusMessage const&)
Unexecuted instantiation: QDBusReply<unsigned int>::QDBusReply(QDBusMessage const&)
Unexecuted instantiation: QDBusReply<QMap<QString, QVariant> >::QDBusReply(QDBusMessage const&)
Unexecuted instantiation: QDBusReply<QDBusConnectionInterface::RegisterServiceReply>::QDBusReply(QDBusMessage const&)
34
    inline QDBusReply& operator=(const QDBusMessage &reply)
35
0
    {
36
0
        QVariant data(QMetaType::fromType<Type>());
37
0
        qDBusReplyFill(reply, m_error, data);
38
0
        m_data = qvariant_cast<Type>(data);
39
0
        return *this;
40
0
    }
Unexecuted instantiation: QDBusReply<QString>::operator=(QDBusMessage const&)
Unexecuted instantiation: QDBusReply<QList<QString> >::operator=(QDBusMessage const&)
Unexecuted instantiation: QDBusReply<bool>::operator=(QDBusMessage const&)
Unexecuted instantiation: QDBusReply<unsigned int>::operator=(QDBusMessage const&)
Unexecuted instantiation: QDBusReply<QMap<QString, QVariant> >::operator=(QDBusMessage const&)
Unexecuted instantiation: QDBusReply<QDBusConnectionInterface::RegisterServiceReply>::operator=(QDBusMessage const&)
41
42
    inline QDBusReply(const QDBusPendingCall &pcall)
43
    {
44
        *this = pcall;
45
    }
46
    inline QDBusReply &operator=(const QDBusPendingCall &pcall)
47
    {
48
        QDBusPendingCall other(pcall);
49
        other.waitForFinished();
50
        return *this = other.reply();
51
    }
52
    inline QDBusReply(const QDBusPendingReply<T> &reply)
53
    {
54
        *this = static_cast<QDBusPendingCall>(reply);
55
    }
56
57
    inline QDBusReply(const QDBusError &dbusError = QDBusError())
58
0
        : m_error(dbusError), m_data(Type())
59
0
    {
60
0
    }
Unexecuted instantiation: QDBusReply<QList<QString> >::QDBusReply(QDBusError const&)
Unexecuted instantiation: QDBusReply<bool>::QDBusReply(QDBusError const&)
Unexecuted instantiation: QDBusReply<QString>::QDBusReply(QDBusError const&)
Unexecuted instantiation: QDBusReply<QDBusConnectionInterface::RegisterServiceReply>::QDBusReply(QDBusError const&)
Unexecuted instantiation: QDBusReply<unsigned int>::QDBusReply(QDBusError const&)
Unexecuted instantiation: QDBusReply<QMap<QString, QVariant> >::QDBusReply(QDBusError const&)
61
    inline QDBusReply& operator=(const QDBusError& dbusError)
62
    {
63
        m_error = dbusError;
64
        m_data = Type();
65
        return *this;
66
    }
67
68
    inline bool isValid() const { return !m_error.isValid(); }
69
70
    inline const QDBusError& error() const { return m_error; }
71
72
    inline Type value() const
73
    {
74
        return m_data;
75
    }
76
77
    inline operator Type () const
78
0
    {
79
0
        return m_data;
80
0
    }
Unexecuted instantiation: QDBusReply<QDBusConnectionInterface::RegisterServiceReply>::operator QDBusConnectionInterface::RegisterServiceReply() const
Unexecuted instantiation: QDBusReply<bool>::operator bool() const
Unexecuted instantiation: QDBusReply<QString>::operator QString() const
Unexecuted instantiation: QDBusReply<unsigned int>::operator unsigned int() const
Unexecuted instantiation: QDBusReply<QMap<QString, QVariant> >::operator QMap<QString, QVariant>() const
81
82
private:
83
    QDBusError m_error;
84
    Type m_data;
85
};
86
87
# ifndef Q_QDOC
88
// specialize for QVariant:
89
template<> inline QDBusReply<QVariant>&
90
QDBusReply<QVariant>::operator=(const QDBusMessage &reply)
91
0
{
92
0
    QVariant data(QMetaType::fromType<QDBusVariant>());
93
0
    qDBusReplyFill(reply, m_error, data);
94
0
    m_data = qvariant_cast<QDBusVariant>(data).variant();
95
0
    return *this;
96
0
}
97
98
// specialize for void:
99
template<>
100
class QDBusReply<void>
101
{
102
public:
103
    // Rule Of Zero applies!
104
105
    inline QDBusReply(const QDBusMessage &reply)
106
0
        : m_error(reply)
107
0
    {
108
0
    }
109
    inline QDBusReply& operator=(const QDBusMessage &reply)
110
0
    {
111
0
        m_error = QDBusError(reply);
112
0
        return *this;
113
0
    }
114
    inline QDBusReply(const QDBusError &dbusError = QDBusError())
115
0
        : m_error(dbusError)
116
0
    {
117
0
    }
118
    inline QDBusReply(const QDBusPendingCall &pcall)
119
0
    {
120
0
        *this = pcall;
121
0
    }
122
    inline QDBusReply &operator=(const QDBusPendingCall &pcall)
123
0
    {
124
0
        QDBusPendingCall other(pcall);
125
0
        other.waitForFinished();
126
0
        return *this = other.reply();
127
0
    }
128
    inline QDBusReply& operator=(const QDBusError& dbusError)
129
0
    {
130
0
        m_error = dbusError;
131
0
        return *this;
132
0
    }
133
134
0
    inline bool isValid() const { return !m_error.isValid(); }
135
136
0
    inline const QDBusError& error() const { return m_error; }
137
138
private:
139
    QDBusError m_error;
140
};
141
# endif
142
143
QT_END_NAMESPACE
144
145
#endif // QT_NO_DBUS
146
#endif